Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi PDF-Dateien drucken (viele) (https://www.delphipraxis.net/211883-pdf-dateien-drucken-viele.html)

rokli 17. Nov 2022 09:43

AW: PDF-Dateien drucken (viele)
 
Hi ItBlumi,

habe mir Deine Lösung angesehen und heruntergeladen. Dein beigefügte Testprogramm läuft auch.
Dann habe ich, als ersten Test, das folgende Programm geschrieben:

Delphi-Quellcode:
procedure TfrmMain.Button2Click(Sender: TObject);
var
   AConverter   : TGS_Pdfconverter;
   aFiles       : Array[0..9] of String;
   sQuellPfad   : String;
   sZielPfad   : String;
begin
   sQuellPfad   := 'C:\Temp\pdffen\quell\';
   sZielPfad   := 'C:\Temp\pdffen\';

   aFiles[1]   := sQuellPfad + '0174163013.pdf';
   aFiles[2]   := sQuellPfad + '0174163020.pdf';
   aFiles[3]   := sQuellPfad + '0174164010.pdf';
   aFiles[4]   := sQuellPfad + '0174164027.pdf';
   aFiles[5]   := sQuellPfad + '0174164034.pdf';
   aFiles[6]   := sQuellPfad + '0174164041.pdf';
   aFiles[7]   := sQuellPfad + '0174164065.pdf';
   aFiles[8]   := sQuellPfad + '0174164072.pdf';
   aFiles[9]   := sQuellPfad + '0174164089.pdf';

   AConverter := TGS_PdfConverter.Create(sZielPfad);
   Aconverter.ToPdf(aFiles, sZielPfad + 'new.pdf', false);
   FreeAndNil(AConverter);

   ShowMessage('fertig');
end;
Es läuft komplett, ohne Fehlermeldungen durch, tut aber leider nicht was es soll.
Ich habe versucht in der GS_Converter nachzusehen, was da gemacht wird, verstehe aber nicht alles und komme daher nicht wirklich weiter.

Würdest Du da einmal draufschauen?

Danke.

himitsu 17. Nov 2022 09:44

AW: PDF-Dateien drucken (viele)
 
Statt PDF als PostScript speichern?
"Gute" Drucker verstehen das direkt.

Delphi-Quellcode:
COPY abc.ps \\servername\printername
aber sollte wohl auch im Delphi über CopyFile oder TStream funktionieren, ohne ein Zusatzprogramm dazwischen.
Vielleicht sogar
Delphi-Quellcode:
COPY abc.ps LPT1
oder eben \\localhost\printername

itblumi 17. Nov 2022 12:35

AW: PDF-Dateien drucken (viele)
 
Hi rokli,

schau mal in den folgenden Eigenschaften was er dir dort ausgibt, wenn keine Datei erstellt wird dann dürfte ein Fehler aufgetreten sein.
Delphi-Quellcode:
AConverter.Debug := True;
// string liste mit dem was er macht
AConverter.StdOut

// errors als strings sollte eigentlich leer sein
AConverter.LastErrors
// error code -> dieser sollte 0 sein falls alles funktioniert hat
AConverter.LastErrorCode

itblumi 17. Nov 2022 12:46

AW: PDF-Dateien drucken (viele)
 
AConverter.ToPdf gibt dir auch eine Boolean Ausdruck zurück dieser sollte den Fehlercode (LastErrorCode) vor dem beenden der Prozedur prüfen.

Habe Dir das Ganze etwas anschaulicher zusammen gestellt.

Delphi-Quellcode:
procedure TfrmMain.Button2Click(Sender: TObject);
var
   AConverter  : TGS_Pdfconverter;
   aFiles      : Array[0..9] of String;
   sQuellPfad  : String;
   sZielPfad  : String;
begin
   sQuellPfad  := 'C:\Temp\pdffen\quell\';
   sZielPfad  := 'C:\Temp\pdffen\';

   aFiles[1]  := sQuellPfad + '0174163013.pdf';
   aFiles[2]  := sQuellPfad + '0174163020.pdf';
   aFiles[3]  := sQuellPfad + '0174164010.pdf';
   aFiles[4]  := sQuellPfad + '0174164027.pdf';
   aFiles[5]  := sQuellPfad + '0174164034.pdf';
   aFiles[6]  := sQuellPfad + '0174164041.pdf';
   aFiles[7]  := sQuellPfad + '0174164065.pdf';
   aFiles[8]  := sQuellPfad + '0174164072.pdf';
   aFiles[9]  := sQuellPfad + '0174164089.pdf';

   AConverter := TGS_PdfConverter.Create(sZielPfad);
   AConverter.Params.NoSaver := True;
   AConverter.Debug := True; // debug Ausgabe der Bibliothek aktivieren


   if (AConverter.ToPdf(aFiles, sZielPfad + 'new.pdf', false)) then
     ShowMessage('fertig')
   else begin
     ShowMessage('Fehler: ' + AConverter.LastErrors);
     AConverter.StdOut.SaveToFile(sZielPfad + 'output.log'); // Die Prozess Ausgabe speichern
   end;

   FreeAndNil(AConverter);
Edit: Es kann auch sein das Ghostscript versucht zu ermitteln ob er Schreibrechte in dem Verzeichnis besitzt, dass kann mit unter schief gehen. Dies kannst du mit NOSAVER unterdrücken. Ich habe das noch zusätzlich hinzugefügt im obigen Code.

itblumi 17. Nov 2022 13:27

AW: PDF-Dateien drucken (viele)
 
Zitat:

Zitat von himitsu (Beitrag 1514905)
Statt PDF als PostScript speichern?
"Gute" Drucker verstehen das direkt.

Delphi-Quellcode:
COPY abc.ps \\servername\printername
aber sollte wohl auch im Delphi über CopyFile oder TStream funktionieren, ohne ein Zusatzprogramm dazwischen.
Vielleicht sogar
Delphi-Quellcode:
COPY abc.ps LPT1
oder eben \\localhost\printername

Ghostscript kann auch direkt drucken nach dem er die Dateien zusammen gestellt hat, leider ist das noch nicht mit dem derzeitigen Converter möglich. Ich bin gerade dabei eine dementsprechende Version dafür auch bereit zu stellen. Da mich das Thema interessiert hat und dies ja auch ein häufiger Anwendungsfall sein kann. Das OutputFile ist dann der Drucker mit dem Prefix (%printer%).

Frickler 17. Nov 2022 15:00

AW: PDF-Dateien drucken (viele)
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1514889)
Auch wenn der initiale Overhead relativ hoch ist:
https://pdfbox.apache.org/2.0/commandline.html
Kann Mergen und Drucken (über Kommandozeile)

Mergen über Kommandozeile geht auch mit pdftk:
Code:
pdftk datei1.pdf datei2.pdf ... dateix.pdf cat output gesamt.pdf
(und vieles vieles mehr...)

itblumi 18. Nov 2022 08:21

AW: PDF-Dateien drucken (viele)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe Dir nochmal ein kleines Test Projekt zusammen gestellt und dies mit der Version die im Github ist getestet.
Am Anfang hatte ich das gleiche Problem mit einer älteren Version.
Habe Dir hier nochmal eine Liste mit möglichen Fehlerquellen und Lösungsmöglichkeiten zusammen gestellt.
Diese ist auch in dem kleinen Testprojekt vorhanden.
  1. Überprüfen ob die richtige Api Version benutzt wird es sollte die 1010 sein und ist in der unit SkiSys.GS_Api zu finden.
    Falls die Version unterschiedlich sein sollte, dann bitte nochmal die richtige Version aus dem Github aus checken.
  2. Den Suchpfad überprüfen ob er da nicht eine ältere Version verwendet wird.
  3. Ich habe dann die dcu's vorsichtshalber von Hand gelöscht. In früheren Versionen von Delphi kam es manchmal vor das er die dcu's nicht neu erstellt hat.

Viele Grüße
Jan

josef-b 18. Nov 2022 09:12

AW: PDF-Dateien drucken (viele)
 
Wir haben so eine ähnliche Situation.

Bekommen viele PDF-Belege per email-Anhang die wir dann im Stapel ausdrucken.

Wir können da auch sumatra empfehlen, was wir auch auf Empfehlung von Holger Klemt schon länger einsetzen.

das ganze findet man auf sumatrapdfreader.org.

Da gibt es auch eine Doku zu der Commandline.

Bei uns sieht es dann ungefähr so aus:

Delphi-Quellcode:
procedure TF1.belege_drucken;
var
adrucker: string
sumatra_pfad : string;
commandline : string;
adateiname: string;
begin
adrucker := (dein Drucker);
adateinmae := (deine PDF-Datei);

sumatra_pfad := 'C:\Sumatra\SumatraPdf.exe';
commandline := '-print-to ' + '"' + adrucker + '" "' +
                      adateiname + '"';
ShellExecute(0,'open',pchar(sumatra_pfad),pchar(commandline),nil,SW_ShowNormal);

Bernhard Geyer 18. Nov 2022 09:12

AW: PDF-Dateien drucken (viele)
 
Zitat:

Zitat von Frickler (Beitrag 1514930)
Mergen über Kommandozeile geht auch mit pdftk:
Code:
pdftk datei1.pdf datei2.pdf ... dateix.pdf cat output gesamt.pdf
(und vieles vieles mehr...)

Yepp. Wird hier mehrere Lösungen geben.
Wir setzen pdfbox ein und sind hier sehr zufrieden (verglichen mit der Delphi-Native Komponente die wir vor Jahren hatten).
Deshalb kann ich nur davon sprechen, das diese eine Lösungsmöglichkeit wäre.

josef-b 18. Nov 2022 09:43

AW: PDF-Dateien drucken (viele)
 
Die Frage war bei uns dann eine andere..

Müssen wir die Dateien eigentlich alle drucken?

Wir speichern PDF-Belege mittlerweile alle in der firebird-Datenbank als Blob..

Man hat dann u.a. auch nicht mehr so viele Dateien, sondern insgesamt nur noch eine.

Kommt halt auf die Bedürfnisse des Anwenders an ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 Uhr.
Seite 2 von 3     12 3      

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