[D7] Créer un postScript depuis une imprimante lambda
cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 2011
-
19 nov. 2008 à 10:20
cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 2011
-
19 nov. 2008 à 15:28
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:
New(pDriverInfo); // Neu Struktur erstellen
pDriverInfo^.pDataFile := PCHar(DataFile); // On peut mettre un fichier ppd ici
cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 20111 19 nov. 2008 à 15:28
Bon, j'arrive à récupérer le fichier PPD pour chacune de mes imprimantes installées sur mon poste:
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...