AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Drucken mit gleichzeitigem generieren eines PDFs
Thema durchsuchen
Ansicht
Themen-Optionen

Drucken mit gleichzeitigem generieren eines PDFs

Ein Thema von oakley · begonnen am 25. Feb 2020 · letzter Beitrag vom 8. Mär 2022
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.185 Beiträge
 
Delphi 12 Athens
 
#1

AW: Drucken mit gleichzeitigem generieren eines PDFs

  Alt 23. Feb 2022, 15:20
Deine Schritte stimmen nicht ganz!

- Ein Programm schickt den Druckauftrag (per Windows GDI) an einen installierten Drucker (Treiber, z.B. 'Mircosoft Print to PDF')
Ich hatte aber irgendwo gelesen dass dafür am Besten GhostScript PS Drucker installiert werden sollte,
das habe ich gemacht.
Damit kommen auch astreine .PS und nach Konvertierung PDF's raus.

Kann sein dass es mit "Microsoft Print to PDF" auch geht, aber dann muss man den ja mit Redmon umbiegen,
oder sich einen 2ten "Microsoft Print to PDF" installieren.

Ich denke der Trick ist, egal welcher Drucker, Redmon/MFileMon legen sich als Port an und fangen den Druck ab.
Das scheint soweit ja auch zu funktionieren.
  Mit Zitat antworten Zitat
oakley

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

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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz