IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

[D7] Créer un postScript depuis une imprimante lambda


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut [D7] Créer un postScript depuis une imprimante lambda
    Bonjour à tous,

    Je cherche à créer un Fichier postScript valide qui pourra être distillé avec GhostScript.
    Donc, je pend un fichier (Word, par exemple), je fait "Imprimer dans un fichier", et ça me fait un fichier PRN que je renomme en PS, et ça fonctionne très bien.
    ... Enfin, sur quelques imprimantes seulement. :-(

    En effet, certaines imprimantes n'ont pas l'air de savoir faire du PostScript standard, ça doit être un format propriétaire ou un truc comme ça.
    Et je ne veux pas installer d'imprimante PDF virtuelle (enfin, je ne veux pas de procédure d'installation, tout gérer par le code).

    J'ai donc été chercher le driver de l'imprimante PDF Adobe (ADIST5.PPD), et j'aimerais savoir comment soit:

    - Créer par le code une imprimante virtuelle s'appuyant sur ce driver.
    - Prendre une imprimante déjà installée et la faire pointer temporairement sur ce driver.
    - Savoir générer un postScript standard avec une imprimante lambda.

    Je cherche depuis un bout de temps et j'ai eu des pistes, genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        New(pDriverInfo); // Neu Struktur erstellen
        pDriverInfo^.pDataFile := PCHar(DataFile); // On peut mettre un fichier ppd ici
    Ou

    http://support.microsoft.com/kb/142057/fr
    (Je n'arrive pas à le mettre en application... ci-joint, mon essai: http://www.developpez.net/forums/d60...d/#post3788088)

    Mais ce sont des types d'instructions que je n'ai pas l'habitude de manipuler... Je ne sais pas si ça peut vraiment résoudre mon pb.

    Pouvez vous m'aider ?

    Merci d'avance.
    David.

  2. #2
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bon, j'arrive à récupérer le fichier PPD pour chacune de mes imprimantes installées sur mon poste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    function SetPrinterOptions(NewFilePPD: String=''): String;
    var ret: String;
      passe: Boolean;
      DeviceMode, hPrinter: THandle;
      Device, Driver, Port: array[0..MAX_PATH] of Char;
      DriverInfo2: PDriverInfo2;
      DriverInfo2Size: DWORD;
    begin
      passe := False;
      ret := '';
      Printer.GetPrinter(Device, Driver, Port, DeviceMode);
      OpenPrinter(Device, hPrinter, nil);
      try
        GetPrinterDriver(hPrinter, nil, 2, nil, 0, DriverInfo2Size);
        GetMem(DriverInfo2, DriverInfo2Size);
        try
          GetPrinterDriver(hPrinter, nil, 2, DriverInfo2, DriverInfo2Size, DriverInfo2Size);
          //StrPCopy(Driver, ExtractFileName(StrPas(DriverInfo2^.PDriverPath)));
          ret := DriverInfo2^.pName+': '+#09+DriverInfo2^.pDataFile;
          if (Trim(NewFilePPD)<>'') and (FileExists(NewFilePPD)) then begin // Réaffecter le driver (RIEN NE MARCHE...)
            //StrPCopy(DriverInfo2^.PDriverPath, NewFilePPD);
            //DriverInfo2^.PDriverPath := PChar(NewFilePPD);
            //StrPCopy(Driver, StrPas(DriverInfo2^.PDriverPath));
            //StrPCopy(Driver, NewFilePPD);
            passe := True;
          end;
        finally
          FreeMem(DriverInfo2, DriverInfo2Size);
        end;
      finally
        ClosePrinter(hPrinter);
      end;
      if passe then
        Printer.SetPrinter(Device, Driver, Port, DeviceMode);
      Result := ret;
    end;
     
    procedure TForm1.btnGetImpClick(Sender: TObject);
    var i, tmp: Integer;
      strTmp: String;
    begin
      strTmp := '';
      Printer.Refresh;
      tmp := Printer.PrinterIndex;
      for i:=0 to Printer.Printers.Count-1 do begin
        Printer.PrinterIndex := i;
        strTmp := strTmp+sLineBreak+SetPrinterOptions();
      end;
      Printer.PrinterIndex := tmp;
      ShowMessage(strTmp);
    end;
     
    procedure TForm1.btnSetImpClick(Sender: TObject);
    var strTmp: String;
    begin
      strTmp := 'C:\WINNT\system32\spool\DRIVERS\W32X86\3\ADIST5.PPD';
      SetPrinterOptions(strTmp); // Ne fonctionne pas
      ShowMessage('Driver changé: '+IntToStr(Printer.PrinterIndex));
    end;
    Mais je n'arrive pas à le changer... Le SetPrinter ne prend pas en paramètre le DriverInfo2 qui contient l'info...

    Avez vous une piste ?
    David.

Discussions similaires

  1. [WD14] Créer un Etat pour une Imprimante Code à Barre
    Par b_reda31 dans le forum WinDev
    Réponses: 13
    Dernier message: 21/09/2012, 08h24
  2. [XSLT] Créer un TransformerFactory depuis une chaine
    Par demanghonj dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 06/08/2009, 10h20
  3. Créer un WS depuis une WSDL et déployable sur JBoss
    Par yperey dans le forum Services Web
    Réponses: 5
    Dernier message: 07/04/2008, 12h44
  4. Créer un paquet depuis une application Java
    Par mac88 dans le forum KDE
    Réponses: 2
    Dernier message: 23/02/2008, 19h36
  5. [applet] créer un fichier depuis une applet.
    Par BouB dans le forum Applets
    Réponses: 12
    Dernier message: 02/04/2007, 06h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo