Einzelnen Beitrag anzeigen

oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#41

AW: Drucken mit gleichzeitigem generieren eines PDFs

  Alt 8. Mär 2022, 22:20
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
  Mit Zitat antworten Zitat