Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Drucken mit gleichzeitigem generieren eines PDFs (https://www.delphipraxis.net/203511-drucken-mit-gleichzeitigem-generieren-eines-pdfs.html)

oakley 25. Feb 2020 12:49

Drucken mit gleichzeitigem generieren eines PDFs
 
Hallo zusammen,

ich würde gerne einen Druckertreiber bauen, der gleichzeitig auf den Windows Standard Drucker druckt und ein PDF erzeugt.
Ich habe schon die Sufu benutzt und auch einen Verweis zu den RedMon Komponenten gefunden aber die haben keinen Support für Win10.
Gibt es sowas eventuell schon als fertiges Produkt? Wie könnte ich da am Besten ansetzen?

Es geht im Prinzip darum, dass ich eine Software habe, die Papierdokumente erzeugt aber gleichzeitig kein PDF erzeugen kann. Und das möchte ich mit diesem Treiber umgehen.

LG

Mirko

HolgerX 25. Feb 2020 14:55

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hmm..

Redmon läuft auch auf W10 (zu mindestens hier bei uns ;) )

Generell kannst Du nun einen 'echten' Treiber programmieren, welcher als Weiche fungiert, dann ist Delphi aber raus...

Oder per Redmon eine Weiche mit einem eigenen Tool, welches das Erzeugen der PDFs händelt und die Druckerdaten an den richtigen Drucker weiter gibt.

Dies funktioniert aber nur praktikabel mit PS-Script fähigen Drucker, da dann die Erzeugung durch Weiterreichung an z.B. GhostScript für die PDF-Erzeugung gut funktioniert und die Druckerdaten einfach an den Drucker weiter gegeben werden können.

KodeZwerg 25. Feb 2020 15:41

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Ich habe die Frage bestimmt nicht korrekt verstanden, hier ein schnippsel wie man den Microsoft Print to PDF direkt anspricht und ein PDF erzeugt.

Delphi-Quellcode:
var
  DeviceMode: THandle;
  Device, Driver, Port: array[0..80] of Char;
begin
  Printer.PrinterIndex := Printer.Printers.IndexOf('Microsoft Print to PDF'); // drucker
  Printer.GetPrinter(Device, Driver, Port, DeviceMode);
  Printer.SetPrinter(Device, Driver, 'Test.pdf', 0); // dateiname
  Printer.BeginDoc;
  Printer.Canvas.TextOut(100, 100, 'Test'); // pdf inhalt
  Printer.EndDoc;
end;

Luckie 25. Feb 2020 18:01

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Das erzeugt PDFs. Er hat aber ein Word Dokument, welches er drucken und gleichzeitig als PDF speichern will

HolgerX 25. Feb 2020 18:14

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hmm..

Oder ganz anders:
Du nimmst dir z.B. PDFCreator, lässt damit automatisch das PDF in einem festen Verzeichnis ablegen.
Zusätzlich hast Du einen Dienst, welcher auf das Verzeichnis schaut und beim Ablegen einer Datei, diese auf einem Drucker ausgibt.

Alles kannst Du ohne Programmierung eines Treibers hinbekommen, nur den Dienst zum Verzeichnis überwachen mit Drucken müsstest Du machen, oder mal Googln..

Luckie 25. Feb 2020 19:04

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Man braucht keinen Dienst, um ein Verzeichnis zu überwachen. Das kann man mit einem ganz normalen Programm: ReadDirectoryChanges.

hoika 25. Feb 2020 20:03

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hallo,
wo steht hier was von Word-Dokument?

Zitat:

Es geht im Prinzip darum, dass ich eine Software habe, die Papierdokumente erzeugt aber gleichzeitig kein PDF erzeugen kann. Und das möchte ich mit diesem Treiber umgehen.
Ich weiß von WPTools (erzeugt RTF-Dokumente, neuerdings auch docx)
das wPDF gibt, was einen virtuellen PDF-Drucker simuliert.
Und das ganze per Software.

Ein PDF-Drucker wäre z.B. eDoc Printer Pro

http://vondoczudoc-wiki.oblomov.de/d...ckers_tmkartei

https://www.edocprinter.de/

Der glaube ich sogar eine COM-Schnittstelle.

Luckie 25. Feb 2020 21:58

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Das war nur ein Beispiel für ein vorhandenes Dokument, das gedruckt werden soll. :roll:

hoika 25. Feb 2020 22:22

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hallo,
ich drücke mal zurück :)

Die Frage ist halt, ob auf die Ausgabe-Datei Einfluss genommen werden kann.

p80286 25. Feb 2020 22:36

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Zitat:

Zitat von hoika (Beitrag 1458373)

Die Frage ist halt, ob auf die Ausgabe-Datei Einfluss genommen werden kann.

Warum? meinst Du ein Standard Zielverzeichnis für die PDF-Datei? Ist doch wohl anzunehmen, daß eine "Protokolldatei" nicht über die Festplatte verteilt wird?

Gruß
K-H

hstreicher 26. Feb 2020 11:54

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Diverse PDF Drucker bieten die Option das PDF nach Erstellung auch noch als Hardcopy zu Papier zu bringen
auf die schnelle habe ich das bei pdfcreator und win2pdf gefunden.

Eine ähnliche Funktion habe ich auch bei Dokumenten Management Software gesehen die alles was ausgedruckt wird auch gleich als PDF ins Archiv schiebt.

Oder man dreht die Sache um und druckt einfach zuerst ein PDF und läßt dieses PDF dann auf Papier ausdrucken
ein kleines Programm das das PDF Ausgabeverzeichniss überwacht und die neuen Dateien ausdruckt sollte nicht so schwer sein

mfg Hannes

oakley 26. Feb 2020 14:37

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hallo zusammen,

danke für das Feedback. Die Idee zunächst ein PDF zu erzeugen und anschließend noch zu drucken wäre natürlich auch gut.
Die Word Datei ist ein gutes Beispiel denn ich muss das ganze über die Druckfunktion realisieren, sprich ein virtueller Drucker muss schon vorhanden sein.

LG

Mirko

himitsu 26. Feb 2020 15:24

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Man kann auch ein installiertes Office über die OLE ansprechen, dort das Word-Dokument laden und es dann Drucken und/oder als PDF exportieren.

UliTs 23. Mai 2020 09:41

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Zitat:

Zitat von KodeZwerg (Beitrag 1458344)
Ich habe die Frage bestimmt nicht korrekt verstanden, hier ein schnippsel wie man den Microsoft Print to PDF direkt anspricht und ein PDF erzeugt.

Delphi-Quellcode:
var
  DeviceMode: THandle;
  Device, Driver, Port: array[0..80] of Char;
begin
  Printer.PrinterIndex := Printer.Printers.IndexOf('Microsoft Print to PDF'); // drucker
  Printer.GetPrinter(Device, Driver, Port, DeviceMode);
  Printer.SetPrinter(Device, Driver, 'Test.pdf', 0); // dateiname
  Printer.BeginDoc;
  Printer.Canvas.TextOut(100, 100, 'Test'); // pdf inhalt
  Printer.EndDoc;
end;

Vielen Dank für diesen Code! Wenn ich es richtig verstanden habe, ist bei Windows10 der "Microsoft Print to PDF" Treiber grundsätzlich vorhanden.
Wenn man statt des Dateinamens einen Leerstring ( '' ) angibt, fragt Windows nach "begindoc" verständlicherweise nach selbigem.
Gibt es eine Möglichkeit, einen Dateinamen als Voreinstellung anzugeben, der im Dialog nach "begindoc" automatisch vorgeschlagen wird?

Dumpfbacke 23. Mai 2020 12:35

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Zitat:

Zitat von HolgerX (Beitrag 1458335)
Hmm..

Redmon läuft auch auf W10 (zu mindestens hier bei uns ;) )

Hallo HolgerX,
kann du mir sagen wie es das gamcht habt ? Ich möchte von einem beliebigen Programm aus drucken. Dann soll ein Server diese Daten engegen nehmen und ein PDF Datei erzeugen und in ein Verzeichnis ablegen. Geht so etwas mit Redmin und hast due Quellen für mich ?

Danke Tanja

HolgerX 24. Mai 2020 05:47

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hmm..

Installiere doch auf dem Server z.B. PDFCreator und share diesen Drucker dann.
Vom CLient aus kannst Du dann auf diesen Netzwerkdrucker zugreifen und darüber mit jeder Applikation drucken.

PDFCreator kann so konfiguriert werden, dass die PDFs direkt in einem Verzeichnis abgelegt werden.
Der Dateiname kann auch in Creator definiert werden.

Früher hat PDFCreator intern auch den RedMon verwendet, ob dies immer noch der Fall ist, weiß ich nicht.

Wenn Du dies selber machen möchtest, um mehr Einfluss zu haben, dann geht das mit RedMon.

http://www.ghostgum.com.au/software/redmon.htm

Hiermit wird ein 'Anschluss' installiert. Dieser erscheint dann bei der Druckerinstallation in der dortigen Auswahl.

Wenn Du damit was machen willst, ergibt sich somit folgende Reihenfolge:

- Installieren Redmon auf dem Server
- Installieren Druckertreiber (PostScript!!) wie z.B. Microsoft (Generic) 'MS Publisher Color Printer'. Dort als Anschluss(Port) den RedMon angeben.
- Freigeben des Druckers im Netzwerk.
- Verwenden des Druckers als Netzwerkdrucker von einem beliebigen Client.

Nun brauchst Du nur ein Programm/Script, welches die Druckerdaten vom Redmon entgegen nimmt und z.B. mit GhostScript in ein PDF konvertiert.
Dieses wird dann als Ziel in der Konfiguration von RedMon angegeben.

Somit musst Du dich der Datenweiterreichung von RedMon auseinander setzen und mit der Bearbeitung von z.B. Ghostscript.

Druckertreiber Tools wie PDFCreator, oder früher FreePDFXP (nicht mehr verfügbar), machen eben dieses nach diesem Muster.

Edit:
Hier habe ich das alte FreePDF noch zum Download gefunden:
https://www.heise.de/download/product/freepdf-18061

Rollo62 25. Mai 2020 06:49

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Zitat:

Zitat von UliTs (Beitrag 1465089)
Gibt es eine Möglichkeit, einen Dateinamen als Voreinstellung anzugeben, der im Dialog nach "begindoc" automatisch vorgeschlagen wird?

Bräuchte man dafür nicht einfach nur einen eigenen Dialog davorzuschalten ?

JanWe 25. Mai 2020 17:29

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Zitat:

Zitat von HolgerX (Beitrag 1465113)
Hmm..

Installiere doch auf dem Server z.B. PDFCreator und share diesen Drucker dann.

evtl. Vorsicht mit dem PDFcreator - und gerade auf Servern (noch sensibler).

jedenfalls das Setup-Programm für Windows bringt beim installer (oder brachte früher) eine Tool-Bar (für sämtliche Browser) oder ähnliche Adware mit.
Oder zumindest diesen "PDF-Architect". (wohl auch lästige Zwangsbeglückung)

Hab den nicht installiert, da FreePDF (wie Du auch erwähnt hast) seine Dienste ohne jeden Beigeschmack hervorragend tut.
Ist zwar ein VisualBasic Programm, aber ich wüßte kein besseres für Windows, daß ich mit gutem Gewissen empfehlen könnte.

HolgerX 26. Mai 2020 08:17

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hmm..

Zitat:

Zitat von JanWe (Beitrag 1465255)
Zitat:

Zitat von HolgerX (Beitrag 1465113)
Hmm..

Installiere doch auf dem Server z.B. PDFCreator und share diesen Drucker dann.

evtl. Vorsicht mit dem PDFcreator - und gerade auf Servern (noch sensibler).

jedenfalls das Setup-Programm für Windows bringt beim installer (oder brachte früher) eine Tool-Bar (für sämtliche Browser) oder ähnliche Adware mit.
Oder zumindest diesen "PDF-Architect". (wohl auch lästige Zwangsbeglückung)

Hab den nicht installiert, da FreePDF (wie Du auch erwähnt hast) seine Dienste ohne jeden Beigeschmack hervorragend tut.
Ist zwar ein VisualBasic Programm, aber ich wüßte kein besseres für Windows, daß ich mit gutem Gewissen empfehlen könnte.

Das mit PDFCreator war nur ein Beispiel, ich benutze Ihn nicht selber und hatte ihn nur bei Kunden in Verwendung gesehen.
FreePDFXP wurde leider in 2017 eingestellt und die WebSite ist inzwischen von einem anderen Tool in Beschlagnahme. Auch war es dort nicht möglich (im FreePFD) ein direktes speichern ohne Dialog einzustellen. Ich hatte es nur als Beispiel angegeben, wie mit RedMon in Kombination mit GhostScript (wurde beides von FreePDF verwendet) dies umgesetzt werden kann.

Für die automatische Erzeugung von PDFs per Drucker verwende ich ein selbst geschriebenes Tool (ähnlich wie FreePDF nur ohne Dialog ;) ) in Verbindung mit RedMon. Dieses liest sich den 'Titel' aus den PhostScriptdaten (von 'MS Publisher Color Printer' erstellt und per Redmon ans Tool geschickt) aus und verwendet diesen für den Dateinamen.

Somit sollte deine Anwendung nur den zukünftigen Dateinamen als 'Title' mit angeben.
Dies kann mit Printers, aber auch den meisten Report-Komponeten gemacht werden.

Auf der ehemaligen WebSite für FreePDFXP war auch ein Beispiel angegeben, wie ohne den Dialog mir RedMon und GhostScript PDF-Dateien direkt abgelegt werden. Hier müsste man mal schauen, ob diese Seite noch in einem WebArchiv vorhanden ist.

oakley 26. Mai 2020 08:52

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Verstehe ich das richtig, dass Redmon einen Drucker an einem eigenen Port bereit stellt und ich dann bestimmen kann welcher Ausdruck wohin geht?
Ich stelle im Redmon ein, das er ein PDF über Microsoft Print to PDF erzeugen und anschließend über meinen Canon IR3035 drucken soll.
Was sende ich an Redmon einen Druckauftrag oder eine PostScript Datei?

LG

Mirko

HolgerX 26. Mai 2020 09:41

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hmm..

Zitat:

Zitat von oakley (Beitrag 1465294)
Verstehe ich das richtig, dass Redmon einen Drucker an einem eigenen Port bereit stellt und ich dann bestimmen kann welcher Ausdruck wohin geht?
Ich stelle im Redmon ein, das er ein PDF über Microsoft Print to PDF erzeugen und anschließend über meinen Canon IR3035 drucken soll.
Was sende ich an Redmon einen Druckauftrag oder eine PostScript Datei?

LG

Mirko

Nope....

Redmon stellt nur einen 'Anschluss' bereit, wie z.B. LPT1: oder IP:.
Ein installierter Druckertreiber (hier am besten ein Drucker, welcher PhostScript erzeugt/verwendet) erzeugt und sendet die (Roh-)Daten an diesen 'Anschluss'. Dieser 'Anschluss' überträgt diese Daten an den Drucker (per LPT/IP/USB, oder welcher 'weg' auch immer).
Der Drucker nimmt diese Daten dann entgegen und erzeugt den Ausdruck.

Mit RedMon als 'Anschluss' werden die Daten nun nicht an eine Physikalische Schnittstelle/Drucker weitergegeben, sondern an ein anders Programm.

An welches und (teilweise) auch wie kann in der Konfiguration des 'Anschlusses'/RedMon eingestellt werden.

Was dann mit diesen Druckdaten von diesem Programm gemacht wird, ist für RedMon unerheblich.

Ist dieses Programm nun ein Script, welches die Druckdaten an z.B. GhostScript weiter gibt, um damit PDFs zu erzeugen, können diese als Datei abgelegt werden.

PostScript Druckertreiber deshalb, weil GhostScript aus PostScript PDFs erzeugen kann. Der 'MS Publisher Color Printer', fest bei Win10 dabei, erzeugt PostScript Druckerdaten.

UliTs 26. Mai 2020 16:26

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Zitat:

Zitat von Rollo62 (Beitrag 1465178)
Zitat:

Zitat von UliTs (Beitrag 1465089)
Gibt es eine Möglichkeit, einen Dateinamen als Voreinstellung anzugeben, der im Dialog nach "begindoc" automatisch vorgeschlagen wird?

Bräuchte man dafür nicht einfach nur einen eigenen Dialog davorzuschalten ?

Ja danke! Du hast Recht! Die Lösung war zu einfach :oops:.

oakley 16. Feb 2022 20:55

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hallo zusammen,

sorry, dass ich das hier nochmal aufwärme aber ich hatte bis jetzt dazu keine Zeit mehr mich damit zu beschäftigen.
Ich bin da allerdings ein wenig weiter gekommen und zwar lasse ich ein PDF mit Bullzip erzeugen und dieses an anschließend auf einem festgelegten Drucker drucken.
Hier gibt es 2 Probleme: 1. Mit fehlt der Hintergrund des Briefpapiers im PDF, 2. ich muss den Papier-Drucker fest in eine globalsettings.ini Datei schreiben und das Briefpapier darf nicht im Ausdruck erscheinen.

Ich habe mir Redmon angesehen, aber das ist etwas zu komplex für mich, mir fehlt das Verständnis dafür. Funktioniert es unter Windows 10 noch, es ist ja auch schon etwas älter?

Dann dachte ich, ich kann einen TCP Server verwenden und den Port 9100 "abgreifen" und aus der Datei, die ich dann schreiben lasse, einmal ein PDF machen und einmal an dem vom benutzer gewählten Drucker leiten.

Delphi-Quellcode:
procedure TForm1.S1Execute(AContext: TIdContext);
var
   DStream, FStream : TStream;
begin
   DStream := TMemoryStream.Create;
   AContext.Connection.IOHandler.ReadStream(DStream, -1, true);
   FStream := TFileStream.Create('c:\temp\xy.prn', fmCreate);
   DStream.Position := 0;
   FStream.CopyFrom(DStream, DStream.Size);
   FStream.Free;
   DStream.Free;
end;
Wenn ich über einen generischen Drucker mit lokaler IP 127.0.0.1 drucke, wird die Datei erzeugt. Drucke ich auf einem Drucker im Netzwerk macht er logischerweise nichts.

Wie könnte ich die Datei, die dort erzeugt wird, einerseits ein PDF machen (am liebsten mit Bullzip, weil ich hier den Hintergrund separat mit einspielen kann) und andererseits die Datei an den vom Benutzer ausgewählten Drucker weiter leiten?

Oder kann ich irgendwie die Daten vom Port 9100 "loggen" während der Druckauftrag zum vom Benutzer gewünschten Drucker übertragen wird und dann aus der entstandenen Datei einfach ein PDF machen?

Viele Grüße

Mirko

Sinspin 17. Feb 2022 06:18

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hallo, was würde passieren wenn Du zwei mal druckst? Einmal in PDF und einmal an den Drucker?

oakley 17. Feb 2022 08:48

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hallo,

also das Ganze kommt aus einer Fremdanwendung und ich habe keinen Einfluss auf den Druckauftrag oder wie oft gedruckt wird.
Das Beste wäre wahrscheinlich den Auftrag ab zufangen, eine prn Datei schreiben zu lassen und diese dann zum Erstellung des PDF zu verwenden.
So weit so gut aber es bestehen die beschriebenen Probleme.

LG

Mirko

HolgerX 17. Feb 2022 12:24

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hmm..

Zitat:

Zitat von oakley (Beitrag 1502358)
Hallo,

also das Ganze kommt aus einer Fremdanwendung und ich habe keinen Einfluss auf den Druckauftrag oder wie oft gedruckt wird.
Das Beste wäre wahrscheinlich den Auftrag ab zufangen, eine prn Datei schreiben zu lassen und diese dann zum Erstellung des PDF zu verwenden.

Genau deshalb hatte ich Redmon vorgeschlagen (was auch noch unter Win10 läuft!).
Redmon kann die Druckdaten an dein eigenes Programm weiter leiten und dieses erzeugt daraus per z.B. GhostScript ein PDF dem Du den Hintergrund bei Aufruf von GS mitgibst. Zusätzlich dann noch ein Ausdruck auf einem Drucker deiner Wahl, hier dann ohne deinen Hintergrund!

oakley 17. Feb 2022 14:25

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hallo Holger,

okay ich habe Redmon installiert und den Port RPT1 erzeugt.
Ich leite den Ausdruck also zu meinem Programm um wo ich einmal das PDF erzeuge und einmal an den Drucker weiter leite.
Wie komme ich an die Daten, die ans Programm übergeben werden?

Delphi-Quellcode:
var
  Input: TStream;
begin
  Input := THandleStream.Create(GetStdHandle(STD_INPUT_HANDLE));
  ...
Eventuell so aber was mache ich danach damit?

LG

Mirko

Rollo62 17. Feb 2022 14:41

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Redmon ist eine tolle Sache.

Das hier ist das Einzige was mich etwas stört, auch wenn es dann jetzt doch noch mit Win10 funktionert,
scheint der zukünftige Support bei 0 zu liegen.

Zitat:

Won't be implemented:

Remote printing to a printer that uses RedMon.
Support for Windows 10

oakley 17. Feb 2022 14:43

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Ja das hab ich auch gelesen und deswegen dachte ich dass es mit Windows 10 nicht mehr läuft.

Eigentlich bräuchte man bei Redmon gar kein eigenes Programm oder?
Ich bin jetzt soweit, dass ich ein PDF mit Ghostscript pdfwrite bekomme und dann aber den Ausdruck gleichzeitig an einen Netzwerkdrucker weiterleiten kann.
Problem ist noch: Wie bekomme ich den Hintergrund ins PDF und auf dem Drucker wird nichts ausgedruckt. Egal was ich im Redmon Port einstelle.
REDMON_OUTPUTPRINTER zeigt den richtigen Namen des Druckers aber egal ob Copy stdout to printer, Copy temporary file to printer oder Copy pipe to printer es kommt nichts an.

LG

Mirko

HolgerX 17. Feb 2022 20:20

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hmm..

Wenn die Daten per Redmon mit StdOut geschickt werden, dann geht das:

Delphi-Quellcode:
function ReadStdInStream(AStream : TStream):boolean;
var
  Stdin : THandleStream;
  BytesRead : Int64;
  Buffer : array[0..1023] of Byte;
begin
  result := false;
  try
    StdIn := THandleStream.Create(GetStdHandle(STD_INPUT_HANDLE));
    try
      StdIn.Seek(0,0);
      repeat
        BytesRead := StdIn.Read(Buffer,1024);
        if BytesRead > 0 then
          AStream.WriteBuffer(Buffer,BytesRead);
      until BytesRead <= 0;
    finally
      StdIn.Free;
    end;
    result := (AStream.Size > 0);
  except
    on E:Exception do begin
// Fehlerbehandlung
    end;
  end;
end;
Dann an der richtigen Stelle in einer Kopie des Streams dein Hintergrundbild einfügen (dazu brauchst Du PS Kenntnisse oder GOOGLE).
Oder erzeugst erst das PDF und fügst dann das Bild z.B. mit
http://www.lagotzki.de/pdftk/index.html#background
hinzu.

Anschießend mit GS als PDF speichern.
Zum Ausdrucken des original Streams kannst Du dann auch GS verwenden (Google ist auch hier dein Freund)...

Redmon in Verbindung mit einem PS Druckertreiber ist notwendig um die PS-Daten korrekt zu erhalten (von jegweligem Programm aus).
Dein Programm, um die Bearbeitung und die Weiche sauber zu machen...

Rollo62 18. Feb 2022 08:46

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Zitat:

Zitat von Rollo62 (Beitrag 1502394)
Redmon ist eine tolle Sache.

Das hier ist das Einzige was mich etwas stört, auch wenn es dann jetzt doch noch mit Win10 funktionert,
scheint der zukünftige Support bei 0 zu liegen.

Zitat:

Won't be implemented:

Remote printing to a printer that uses RedMon.
Support for Windows 10

Ich muss mich da vielleicht korrigieren:
Es scheint sich hier jemand dem Redmon angenommen zu haben, und es in das MFileMon Projekt integriert zu haben.
https://github.com/lomo74/mfilemon
Binaries gibt es auch.
Das scheint jedenfalls aktuell und gepflegt zu sein, und könnte der Nachfolger des Redmon sein.
Habe jetzt nicht gecheckt ob es 1:1 dem Orginal Redmon entspricht, ich denke aber schon,
vielleicht weiß jemand mehr darüber.

Rollo62 18. Feb 2022 12:29

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich habe das MFileMon mal getestet, hier die Dokumentation zur Installation.
Anhang 54872

So sieht die aktuelle Einstellung aus
Anhang 54873

Es scheint so zu funktionieren, allerdings bekomme ich kein PDF daraus, sondern immer nur ein .PS.
Wenn ich das .PS dann am Ende manuell via GS zu PDF konvertiere scheint alles OK zu sein.

Die Anleitung ist wohl OK, es fehlt womöglich nur eine kleine Änderung im Command feld.

Das Command soll meiner Meinung nach so funktionieren, dass via der Drucker via Pipe etwas an MFileMon schickt.
Allerdings soll der Haken bei Win10 nicht gesetzt sein, weil es da irgendwie anders funktioniert.

User command:
"C:\Program Files\gs\gs9.27\bin\gswin64c.exe" -dBATCH -dSAFER -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dAutoRotatePages=/PageByPage -r600 -sOutputFile="%f" -

!! Important: Keep traling hyphen -
This should be replaced by the input stream from the printer.

Vielleicht hat jemand Erfahrung mit der Konfiguration von MFileMon / Redmon / GS, und sieht den Fehler ?
Oder liegt es doch an einem Fehler in MFileMon ?

oakley 19. Feb 2022 11:23

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hallo Rollo,

habe in der Firma Redmon und zu hause MFileMon isntalliert.
In der Firma funnktioniert das Generieren eines PDFs mit dem Kommando das Du verwendest unter Filemon.
Hier zu Hause bekomme ich Redmon zwar installiert, bekomme aber beim Hinzufügen des Ports einen "unknown error".

MFileMon ließ mich den Port installieren, bekomme aber auch nur ein PS File heraus, genau wie Du.

Wenn ich -sOutputFile einen festen Dateinamen gebe funktiniert das bei Redmon. Bei MFileMon nimmt er den Dateinamen, der oberhalb eingegeben wurde.
Es sieht so aus, als würde er den Ghostscript Befehl gar nicht ausführen. Logdateien werden auch nicht geschrieben, egal was man im Dropdown eingibt.


LG

Mirko

oakley 19. Feb 2022 19:53

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Ich bin jetzt so weit, dass ich den StdOut vom Redmon in eine .ps Datei schreiben lasse und dann per Ghostscript umwandeln lasse.
Das ganze mache ich mit diesem Befehl:
Code:
"C:\Program Files\gs\gs9.55.0\bin\gswin64c.exe" -sDEVICE=pdfwrite -r300 -dBATCH -dNOPAUSE -sFONTPATH=%windir%\fonts -dEmbedAllFonts -dSubsetFonts -sPAPERSIZE=a4 -sOutputFile="c:\temp\test.pdf" c:\temp\bg.ps c:\temp\word.ps
bg.ps ist ein kleines Postscript File mit einem Test für einen Schriftzug im Hintergund.

Code:
<<
/BeginPage
{
  2 eq { pop false }
  {
    gsave
    /Arial findfont 40 scalefont setfont
    newpath
    .90 setgray
    100 700 moveto 30 rotate
    (test test test) false charpath
    1 setlinewidth stroke
    grestore
    true
  } ifelse
} bind
>> setpagedevice
Wenn ich aus Word ein PDF Dokument mit Calibri als Schrift erzeuge rendert Ghostscript die Schrift als Grafik. Bei Arial als richtigen Text.

-sFONTPATH=%windir%\fonts -dEmbedAllFonts -dSubsetFonts hiermit stelle ich doch eigentlich ein, dass die Schriften aus dem Windows Font Verzeichnis gezogen und eingebettet werden sollen oder?

LG

Mirko

oakley 20. Feb 2022 11:30

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich wollte Euch nur den aktuellen Stand mitteilen, falls jemand sowas auch nochmal machen möchte.

Ich habe die Ghostscript DLL eingebunden und lasse in meinem Programm jetzt aus der *.PS Datei ein PDF erzeugen.
Die Initialisierung und das Laden der DLL mache ich über die angehangene Unit.

So starte ich die Konvertierung zum PDF.
Delphi-Quellcode:
oGS := TGhostScript.Create;
oGS.ExecuteWithArgs(GetArgs);
GetArgs:

Delphi-Quellcode:
function TForm1.GetArgs: APAnsiChar;
var
  oArgs: APAnsiChar;
begin
  setlength(oArgs, 0);
  AddArg(oArgs, 'gs');
  AddArg(oArgs, '-r300');
//  AddArg(oArgs, '-dSAFER');
  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=c:\temp\' + filename);
  AddArg(oArgs, '-f');
  AddArg(oArgs, 'c:\temp\xy.ps');
  result := oArgs;
end;
Funktioniert soweit gut, jetzt muss ich nur noch schauen, wie ich die PS Datei zum Drucker bekomme.
Das sind Canon Image Runner, die sollten Postscript können.

LG

Mirko

Rollo62 21. Feb 2022 13:37

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Zitat:

Zitat von oakley (Beitrag 1502501)
Ich bin jetzt so weit, dass ich den StdOut vom Redmon in eine .ps Datei schreiben lasse und dann per Ghostscript umwandeln lasse.

Also schafft Redmon das in einem Rutsch, oder musst Du da noch manuell Hand anlegen ?

Wie gesagt, bei mir kommt leider immer nur .ps raus, ist aber bei MFileMon vielleicht ein etwas anderes Redmon.
Ich habe es mit dem orginalen Redmon aber nicht getestet.

Ein Gedanke war dass man damit lebt dass einfach nur .ps ausgegeben wird,
und dann im Hintergrund ein Programm oder Service laufen hat, welches auf den Ausgabepfad lauscht.

Sobald eine neue .ps Datei angekommen ist könnte das Programm
- die Konvertierung von .ps zu PDF automatisch anstossen ( per Batch-Datei )
- die orginale .ps löschen
- und womöglich das Ergebnis an einen echten Drucker schicken, wenn gewünscht
- die generierte .PDF vielleicht noch irgendwohin verteilen

Oder war es dass, was Du unten beschreibst ?

HolgerX 21. Feb 2022 17:33

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hmm..

1.)
Redmon kann die Druckdaten direkt als Stdout/-in an das aufgerufenen Programm weiter geben.

2.)
Wenn mit der API (.DLL) von Ghostscript gearbeitet wird, kann dieser Stream direkt dorthin weiter gereicht werden, ohne zwischenspeichern als .ps.
Bei Verwendung der GSxx.exe muss dieser Stream meinet Wissens zwischengespeichert werden (hier die .ps) da die Exe eine Datei als Input benötigt..

3.)
Das Erzeugte PDF kann dann zum Einen direkt wieder mit GS an den eigentlichen Drucker geschickt werden und zum Anderen mit PDFTK um dein Hintergrundbild ergänzt werden.



mfilemon dürfte eine umbenannte Kopie von Redmon sein, denn nicht nur die Dialoge, sondern auch die Anleitung kommt mir von Redmon oder FreePDF bekannt vor.
Ob dies gepflegt wird, mag ich bezweifeln, da die Anleitung auch nur bis Win8 geht...

Rollo62 22. Feb 2022 19:19

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Ja, MFileMon scheint ein Ableger von Redmon zu sein, er ist aber aktuell gepflegt.
Während Redmon ziemlich alt ist.

Ich hatte deshalb das MFileMon gesucht, weil igendwo stand das Win10 nicht mehr richtig funktioniert.
Eben weil das Übertragen zum Stdout irgendwie geändert sei.

Offensichtlich kommen ja die Daten im MFileMon auch an, als PS, nur scheint dann das GS nicht angestossen zu werden.
Ich habe immer noch die Hoffnung dass dies ein einfaches Parameter-Problem ist.

Falls das alte Redmon aber immer noch aktuell und amtlich ist, dann ist MFileMon natürlich überflüssig.
Ich hatte mit dem Thema lange nichts zu tun, deshalb kenne ich die Historie von Redmon nicht so gut,
aber könnte demnächst auch eine gute PDF-Drucker Ausgabe brauchen.

Wäre schön wenn man da ein einfaches Kochrezept finden würde :-)

Über den gazen Prozess bin ich mir auch nicht sicher, meine Vermutung:
- Ein Drucker sendet was zum GS-PS Printer
- Dieser erzeugt daraus einen PS Stream
- Und ist verbunden mit MFileMon (oder Redmon ) Port
- Also kommt der PS Stream via dem MFileMon Port zum eigentlich GS, welches Konvertieren soll (gemäß pdfwrite Parameter)
- GS Erzeugt dan mit dem MFileMon (Redmon ) Script die PDF Datei
- GS Speichert die GS Datei an dem festgelegtem Ort, und kann fortlaufenden Filnamen berücksichtigen

So verstehe ich das Ganze, bis auf die letzen beiden Punkte funktioniert es ja anscheinend.

Ob Redmon grundsätzlich was anderes macht als MFileMon sehe ich eigentlich nicht.

HolgerX 23. Feb 2022 12:22

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Hmm..

Deine Schritte stimmen nicht ganz!

- Ein Programm schickt den Druckauftrag (per Windows GDI) an einen installierten Drucker (Treiber, z.B. 'Mircosoft Print to PDF')

- Der Treiber Konvertiert die GDI-Daten in Rohdaten, welche der Drucker versteht.
(Handelt es sich hierbei um einen PostScript Drucker, dann sind die Daten danach PostScript)

- Die Roh-Daten werden dann an den Drucker Anschluss (Port, z.B. LPT/USB/IP oder auch Redmon) weitergeleitet und dieser Port-Treiber reicht diese dann an den Physikalischen Drucker weiter.

- Der Ausdruck erfolgt.

Hier kommt nun RedMon ins Spiel!

Wenn Redmon als Druckeranschluss angegeben wird, dann gibt Redmon diese nicht an den Drucker weiter, sondern ,je nach Konfiguration, an ein Script oder Programm.

Dieses Script kann dann mit diesen Roh-Daten machen, was es will, z.B. als .PS abspeichern, oder bei PostScript diese per GhostScript in ein PDF konvertieren, oder die Roh-Daten bearbeiten und an den 'echten' Druckeranschluss weiter leiten.

Wenn Du deine CMD-Zeile mit Ghostscript bei RedMon einträgst, dann werden die Daten direkt an GS geschickt, jedoch solltest Du hierfür eine separate Batch Datei als Ziel nehmen, wie es im Internet mehrfachst beschrieben wird.

Rollo62 23. Feb 2022 15:20

AW: Drucken mit gleichzeitigem generieren eines PDFs
 
Zitat:

Zitat von HolgerX (Beitrag 1502618)
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz