Delphi-PRAXiS
Seite 1 von 3  1 23      

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 16. Nov 2022 12:07

PDF-Dateien drucken (viele)
 
Moin,
wir müssen zwei mal am Tag, Morgens und Mittags, PDF-Dateien drucken, die von unserem ERP System erstellt werden.
Die PDF-Dateien liegen als einzelne Dateien in einer Netzwerkfreigabe auf einem Windows Server. In der Regel hat jedes Dokument eine DinA4 Seite Inhalt. Manchmal 2 Seiten. Der Inhalt ist Text und 2 Barcodes.
Es handelt sich um jeweils ca. 500 Seiten - die in einer definierten Reihenfolge ausgegeben werden müssen. Die Reihenfolge definiert ein SQL Statement, dass die gewünschte Sortierung erstellt und dann im Datensatz Informationen für den Speicherort und den Dateinamen bereitstellt.
Gedruckt wird das ganze auf einem Kyocera TASKalfa 4002i.
Gedruckt wird mit Foxit Reader, da der Adobe Acrobat Reader garnicht zum laufen zu bringen war.

Dazu haben wir einen Druckjob geschrieben, der in einer Schleife die Datenbank durchläuft und für jede Datei diese Prozedur aufruft:

Delphi-Quellcode:
procedure TfrmMain.p_PrintAndUpdate(cFileName, cDruckWeg : String);
// Neues Dateiprinten
const
   DprPath = '';
   OutPutPath = '';
var
   Parameters   : String;
   Dcc32Path   : String; // 'C:\Program Files (x86)\Foxit Software\Foxit Reader\Foxit Reader.exe';
begin
   Dcc32Path   := FoxitReader;
   Parameters   := '/p ' + cFileName;

   ShellExecAndWait(Dcc32Path , OutPutPath , Parameters ,'open', 1);
end;
Der SchellExecAndWait wird verwendet, weil sonst die Dokumente immer wieder durcheinander gedruckt wurden.

Seid ein paar Tagen haben wir das Problem, dass zwischendurch einseitige PDF-Dokumente zerstückelt werden, nur zur Hälfte gedruckt werden oder auch leere Blätter ausgegeben werden.

Habt Ihr ähnliche Anforderungen, so viel Dokumente auf einmal auszudrucken?
Wie habt Ihr das gelöst?
Wäre das zusammen-mergen von z. B. jeweils 100 PDF-Dokumenten zu einem einzigen neuen PDF-Dokument eine Option? Dann gäbe es nur noch 5 Druckerwarteschlagen-Einträge.

Danke für Tipps.

Phoenix 16. Nov 2022 12:34

AW: PDF-Dateien drucken (viele)
 
Zitat:

Zitat von rokli (Beitrag 1514846)
Wäre das zusammen-mergen von z. B. jeweils 100 PDF-Dokumenten zu einem einzigen neuen PDF-Dokument eine Option? Dann gäbe es nur noch 5 Druckerwarteschlagen-Einträge.

Ja, das wäre jetzt ganz spontan meine erste Idee gewesen.

Da kann dann auch grundsätzlich weniger schief gehen.
Du hast die Files, kannst die mit entsprechenden Tools zu einem großen PDF zusammen packen, und das dann drucken.

Ich würde allerdings ein wenig experimentieren. PDFs zu handhaben ist immer etwas tricky, und kann je nach verwendetem Tooling gerne mal extrem auf den Arbeitsspeicher gehen.
Ggf. ist es schneller oder praktikabler, 50x 10 zu machen als 5x 100 (oder irgendwas in der Mitte, wie gesagt, am besten etwas experimentieren).

Sinspin 16. Nov 2022 13:20

AW: PDF-Dateien drucken (viele)
 
Wenn die PDF Dateien eh von eurem ERP erstellt werden, gibt es dann nicht eine Möglichkeit zweimal zu drucken? Zum Beispiel in ein leichter druckbares Format und in PDF?
Wir verwenden List & Label. Da gibt es ein Export/Vorschauformat als Datei was man sehr einfach später drucken kann.
Schön ist dort auch das alle Drucke in einer Datei stecken können und man trotzdem noch jeden einzelnen Druck auswählen kann.

Jasocul 16. Nov 2022 13:35

AW: PDF-Dateien drucken (viele)
 
Bei meinem letzten Arbeitgeber hatten wir ein ähnlich gelagertes Problem. Mein dortiger Vorgänger hatte es auch über Adobe gelöst. Allerdings wurde dann die API mal geändert, was zu Problemen führte. Ohne API gab es dann Sortierungsprobleme (wie auch bei euch). Foxit haben wir ebenfalls versucht und sind am Ende bei einer Komponente für Delphi gelandet (WPViewPDF-Plus). Damit hatten wir dann volle Kontrolle über den gesamten Druckvorgang und konnten die Dokumente sogar vorher noch für unsere Bedürfnisse anpassen. Es gibt sicher auch andere Komponenten, mit denen man das hinbekommt.
Fazit:
Man kann sich nicht auf Drittanbieter verlassen, die ihre API oder Aufrufparameter ändern könnten. Mit der Komponente war dann sogar mehr möglich, als ursprünglich geplant.
Auch wenn es nicht ganz billig ist, rechnet es sich, wenn man die eingesparte Zeit, für die ganzen Versuche dagegen rechnet.

itblumi 16. Nov 2022 14:22

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

falls du dich entscheiden solltest die PDF-Dateien zu kombinieren kannst du das relativ einfach mit meinem Ghostscript-Wrapper machen oder Ghostscript direct über die Konsole aufrufen.

Example:
Code:
var
  AConverter: TGS_PdfConverter;
  AFiles: array of string;
begin
  // vorher noch das array mit deinen Dateien füllen
  AConverter := TGS_PdfConverter.Create('pfad zur dll');
  AConverter.ToPdf(AFiles, 'meinekombinierte.pdf', false);
  FreeAndNil(AConverter);
end;
Der code ist ungetestet sollte aber für dich ausreichen.

Die Bibliothek findest du auf Github https://github.com/SKI-Systems/Ghostscript-API-Wrapper

himitsu 16. Nov 2022 14:43

AW: PDF-Dateien drucken (viele)
 
Ihr könntet auch die PDF selber zeichnen/drucken.
Also, wenn ihr die PDFs irgendwie auf ein Canvas oder in eine Datei (Bitmap/PNG/TIFF/......) bekommt, mit PDF-Komponenten oder Programmen (Console mit Parameter, ActiveX, sonstige API)
dann könnt ihr das in der gewünschten Reihenfolge in einen oder mehrere Durckaufträge (TPrinter) gezielter rein- und ausgeben.

DevExpress, SynPDF oder andere PDF-Komponenten
oder direkt aus Reportingtools (ala Fast-Report)





Oder auch mal ganz anders gefragt:

Warum müsst ihr überhaupt so viel und so "fehleranfällig" organisiert drucken?
  • muß es unbedingt erst in die PDFs oder bekommt man die Drucke nicht auch von wo anders
  • kann man die Drucke nicht anders organisieren?
    • also nicht ALLE so schnell hintereinander auf einen Haufen
    • in Ruhe, über längere Zeit (da hast auch Zeit für Pausen, zwischen den Drucken, damit die nicht falsch rauskommen können)
      und nicht nur auf EINEN Haufen
  • ...
  • Und VORALLEM muß es wirklich gedruckt werden?
    https://www.delphipraxis.net/211367-...abels-esl.html
    https://www.tronitag.com/de/digitale...er-produktion/
    Bei Google suchenZKONG
    https://www.tronitag.com/de/esl-label/zv-zb-serie/
    Es gibt nicht nur kleine, sondern auch größere bis große "Displays", bis hin zu übertrieben groß.

    A5 oder A6 wäre wohl bezahlbar, gegenüber der gesparten Arbeit,
    mehr Sicherheit, weil Automatisch alles dort wo es hin soll,
    und den geretteten Bäumen. :angle2:

BerndS 16. Nov 2022 14:43

AW: PDF-Dateien drucken (viele)
 
Ein weiters Tool, das man selber mitgeben kann/muss wäre SumatraPDF
Das ist kostenlos und wurde hier mal von Holger Klemt (IBExperts) empfohlen.

rokli 17. Nov 2022 06:07

AW: PDF-Dateien drucken (viele)
 
Moin,

als erstes mal herzlichen Dank an alle, die sich Gedanken gemacht haben!

Dann zu den Fragen, ob das wirklich gedruckt werden muss: Es handelt sich um Kundenbelege, mit denen als erstes Waren im Lager kommissioniert werden und die dann den Waren als Begleitpapiere beigelegt werden.

Das Mergen von PDF Dokumenten erscheint mir hier im Moment auch die beste Lösung zu werden.

Ich teste mal noch ein bisschen und stelle meine Lösung dann hier ein.

Danke.

Bernhard Geyer 17. Nov 2022 06:45

AW: PDF-Dateien drucken (viele)
 
Auch wenn der initiale Overhead relativ hoch ist:
https://pdfbox.apache.org/2.0/commandline.html
Kann Mergen und Drucken (über Kommandozeile)

MyRealName 17. Nov 2022 09:28

AW: PDF-Dateien drucken (viele)
 
Ich nutze DevExpress und den TdxComponentPrinter, wenn es vom SPeicher her überschaubar ist, tausende PDFs gehen da in einem 32-bit Programm nicht.
Wenn es unbekannt viele sind, dann lasse ich mir die Seiten als Bilder geben und male sie selbst auf den Printer.Canvas. Ich brauche die allerdings auch als einen grossen Druckjob.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 Uhr.
Seite 1 von 3  1 23      

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