AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PDF-Dateien drucken (viele)

Ein Thema von rokli · begonnen am 16. Nov 2022 · letzter Beitrag vom 28. Nov 2022
Antwort Antwort
Seite 2 von 3     12 3      
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: PDF-Dateien drucken (viele)

  Alt 17. Nov 2022, 10:43
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.
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#12

AW: PDF-Dateien drucken (viele)

  Alt 17. Nov 2022, 10:44
Statt PDF als PostScript speichern?
"Gute" Drucker verstehen das direkt.

COPY abc.ps \\servername\printername aber sollte wohl auch im Delphi über CopyFile oder TStream funktionieren, ohne ein Zusatzprogramm dazwischen.
Vielleicht sogar COPY abc.ps LPT1 oder eben \\localhost\printername
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (17. Nov 2022 um 10:47 Uhr)
  Mit Zitat antworten Zitat
itblumi

Registriert seit: 28. Mär 2009
73 Beiträge
 
Delphi XE6 Professional
 
#13

AW: PDF-Dateien drucken (viele)

  Alt 17. Nov 2022, 13:35
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
Jan
Ein neuer Tag bringt so einiges mit sich. Was auch immer es ist, es bleibt ein kleines Abenteuer.
  Mit Zitat antworten Zitat
itblumi

Registriert seit: 28. Mär 2009
73 Beiträge
 
Delphi XE6 Professional
 
#14

AW: PDF-Dateien drucken (viele)

  Alt 17. Nov 2022, 13:46
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.
Jan
Ein neuer Tag bringt so einiges mit sich. Was auch immer es ist, es bleibt ein kleines Abenteuer.

Geändert von itblumi (17. Nov 2022 um 14:05 Uhr)
  Mit Zitat antworten Zitat
itblumi

Registriert seit: 28. Mär 2009
73 Beiträge
 
Delphi XE6 Professional
 
#15

AW: PDF-Dateien drucken (viele)

  Alt 17. Nov 2022, 14:27
Statt PDF als PostScript speichern?
"Gute" Drucker verstehen das direkt.

COPY abc.ps \\servername\printername aber sollte wohl auch im Delphi über CopyFile oder TStream funktionieren, ohne ein Zusatzprogramm dazwischen.
Vielleicht sogar 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%).
Jan
Ein neuer Tag bringt so einiges mit sich. Was auch immer es ist, es bleibt ein kleines Abenteuer.
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
591 Beiträge
 
Delphi XE6 Enterprise
 
#16

AW: PDF-Dateien drucken (viele)

  Alt 17. Nov 2022, 16:00
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...)
  Mit Zitat antworten Zitat
itblumi

Registriert seit: 28. Mär 2009
73 Beiträge
 
Delphi XE6 Professional
 
#17

AW: PDF-Dateien drucken (viele)

  Alt 18. Nov 2022, 09:21
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
Angehängte Dateien
Dateityp: zip GSTest.zip (3,92 MB, 13x aufgerufen)
Jan
Ein neuer Tag bringt so einiges mit sich. Was auch immer es ist, es bleibt ein kleines Abenteuer.
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: PDF-Dateien drucken (viele)

  Alt 18. Nov 2022, 10:12
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);

Geändert von josef-b (18. Nov 2022 um 10:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#19

AW: PDF-Dateien drucken (viele)

  Alt 18. Nov 2022, 10:12
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: PDF-Dateien drucken (viele)

  Alt 18. Nov 2022, 10:43
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 07:33 Uhr.
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