Hallo zusammen,
ich möchte nur kurz sagen, wie ich das Ganze bis jetzt gemacht habe:
Hiermit schreibe ich die PS Datei
Delphi-Quellcode:
XStream := TMemoryStream.Create;
StdIn := THandleStream.Create(GetStdHandle(STD_INPUT_HANDLE));
StdIn.Seek(0,0);
repeat
BytesRead := StdIn.Read(Buffer,1024);
if BytesRead > 0 then
XStream.WriteBuffer(Buffer,BytesRead);
until BytesRead <= 0;
//exportdir = Dir to export files
FStream := TFileStream.Create(exportdir + 'xy.ps', fmCreate);
XStream.Position := 0;
if FStream.CopyFrom(XStream, XStream.Size) > 0 then
begin
FStream.Free;
XStream.Free;
try
try
oGS := TGhostScript.Create;
oGS.ExecuteWithArgs(GetArgs);
finally
FreeAndNil(oGS);
end;
except
on E: TExceptionGS do
begin
end;
end;
Die Funtion ExecuteWithArgs(GetArgs) führt die Konvertierung zum PDF mit Ghostscript aus:
Delphi-Quellcode:
function TForm1.GetArgs(): APAnsiChar;
var
oArgs: APAnsiChar;
begin
setlength(oArgs, 0);
AddArg(oArgs, 'gs');
AddArg(oArgs, '-r300');
AddArg(oArgs, '-dNOSAFER');
AddArg(oArgs, '-dBATCH');
AddArg(oArgs, '-dNOPAUSE');
AddArg(oArgs, '-sDEVICE=pdfwrite');
AddArg(oArgs, '-dPDFSETTINGS=/ebook');
AddArg(oArgs, '-sFONTPATH=%windir%/fonts');
AddArg(oArgs, '-dEmbedAllFonts=true');
AddArg(oArgs, '-dSubsetFonts=true');
AddArg(oArgs, '-dNumRenderingThreads=8');
AddArg(oArgs, '-sOutputFile=' + exportdir + filename);
AddArg(oArgs, '-f');
AddArg(oArgs, exportdir + 'xy.ps');
result := oArgs;
end;
Ich rufe oGS.ExecuteWithArgs(GetArgs2) nochmal mit anderen Parametern auf um die Ausgabe zum Drucker um zu leiten.
Delphi-Quellcode:
function TForm1.GetArgs2(): APAnsiChar;
var
oArgs: APAnsiChar;
begin
setlength(oArgs, 0);
AddArg(oArgs, 'gs');
AddArg(oArgs, '-dBATCH');
AddArg(oArgs, '-dNOPAUSE');
AddArg(oArgs, '-dNOSAFER');
AddArg(oArgs, '-sDEVICE=mswinpr2');
AddArg(oArgs, '-sOutputFile=%printer%TESTPS');
AddArg(oArgs, exportdir + 'xy.ps');
result := oArgs;
end;
Hier wird ein Test-Drucker namens TESTPS angesteuert.
Soweit funktioniert alles.
LG
Mirko