Delphi-PRAXiS
Seite 3 von 5     123 45      

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)

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 Uhr.
Seite 3 von 5     123 45      

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