![]() |
AW: PDF-Dateien drucken (viele)
Zitat:
OK, man könnte die Datenbank auf viele USB-Sticks, SD-Cards oder große RFDI-Chips kopieren. Oder in übergroße QR-Codes und die dann ausdrucken. :lol: Zitat:
Die Begleitpapiere müssen also so oder so. Eventuell könne man sowas auch direkt auf die Verpackung drucken. (innen und außen) ![]() ![]() ![]() ![]() Und wenn Unterlagen für Kommissionierung und Begleitung nicht die Selben sind, jene als digitale Medien, ala ESL/RFID/... Einige der ESL-Tags, welche wir demnächst einführen, haben RFID direkt integiert, welches ber Funk umgeschrieben werden kann. Aktuell nutzen wir Barcodes auf dem ePaper, aber RFID hätte zum elektronischen Lesen einige Vorteile. (kein optischer Platzbedarf und einfacher/schneller/sicherer lesbar) Zitat:
BLOB als Datei, aber natürlich der restliche Verwaltungs-Datensatz in der DB. Und teilweise so, dass bestimmte Dateien auf WORM-Laufwerke können. Wegen besserem Backup und Datensicherheit und z.B. WORM (Write Once Read Many) wegen Datenschutz- und steuerrechtlichen Verordnungen. Gut, noch besser wäre es, wenn man auch einige Zusatzinfos noch bei den Dateien mit ablegt ... falls mal die Software/DB kaputt ist und es dort kein Funktionierendes Backup gibt, dann Zuordnungsinfos zu/bei/an/in der jeweiligen Datei. ALLES in einer DB, dann vieleicht besser noch eine Partitionierung der DB vornehmen. z.B. jährliche BLOBs je in einer DB-Datei, welche nach dem JAHR nicht/kaum noch verändert wird. Ein Backup der Festplatte wird sich freuen, wenn sich nicht ständig überall immer wieder alles im Dateisystem ändert. |
AW: PDF-Dateien drucken (viele)
Ja dann würde ich es wohl mit sumatra machen.
|
AW: PDF-Dateien drucken (viele)
Herzlichen Dank für das große Interesse!
@Jan 1. Habe Deine Vorgaben eingebaut und bekomme die Fehlermeldung [Content] Fehler: The File: does not exist Daraufhin hab ich mal eine bestehende PDF Datei ins Zielverzeichnis kopiert und NEW.PDF genannt. 2. Das Log lässt sich leider nicht kompilieren. Da meldet der Kompiler: [dcc32 Fehler] FMain.pas(413): E2362 Auf protected-Symbol TGS_Api.StdOut kann nicht zugegriffen werden 3. Dein Test-Programm habe ich erfolgreich nutzen können. Als nächstes werde ich die Logiken mal in mein Testprogramm übernehmen. Bis dann. |
AW: PDF-Dateien drucken (viele)
zu 2. Entschuldige bitte das hatte ich nur im Forum geschrieben und nicht kompiliert, es muss natürlich StdOutLog heißen.
Ich habe auch noch eine neue Version fertig gemacht in der du mit
Delphi-Quellcode:
oder
if (AConverter.Print('Dateien mit ; getrennt einfügen', 'Windows Drucker Name', False)) then ...
Delphi-Quellcode:
die zusammen gefügte Datei direkt Drucken kannst. Falls der Drucker nicht gefunden werden kann, dann zeigt Ghostscript den Windows Druck Dialog an in dem man einen Drucker auswählen kann. Falls er ihn findet schickt er sofort den Druckauftrag zum Drucker.
if (AConverter.Print(aFiles, 'Windows Drucker Name', False)) then ...
|
AW: PDF-Dateien drucken (viele)
Hi Jan,
aus deinem Test-Coding: 1. Bitte passe vorher den Suchpfad in den Projekt optionen an damit er die Lib findet ... ich habe die *.libs immer dem Projekt hinzugefügt. in welchen Parameter kann ich das denn eintragen? |
AW: PDF-Dateien drucken (viele)
So ist es bei mir im XE6, ich hoffe das es sich nicht geändert hat.
Projekt -> Optionen -> Delphi-Compiler Dann das Ziel: Alle Konfigurationen - Alle Plattformen Da dürfte dann eine Zeile mit dem "Suchpfad" stehen und dort den Pfad zur Lib eingeben. Du kannst natürlich auch die Dateien direkt einbinden, dass sollte keinen Unterschied machen. |
AW: PDF-Dateien drucken (viele)
Hallo alle zusammen!
Die Software von Jan läuft sehr gut. Mein Fehler in der ersten Version wahr wohl tastächlich, dass ich die Dateinamen in einerm Array zur Verfügung gestellt habe. Es hätte aber wohl eine Semikolon separierte CSV Datei sein sollen, die dann als Input Liste dem
Delphi-Quellcode:
zur Verfügung gestellt werden muss.
AConverter.ToPdf
Zum Nachvollziehen die beiden wesentlichen Proceduren:
Delphi-Quellcode:
Meinen besondereren Dank and Jan, der sich viel Mühe mit mir gegeben hat.
procedure TfrmGsTst.Button1Click(Sender: TObject);
var AConverter: TGS_PdfConverter; AFiles: string; begin M_Output.Clear; sQuelle := 'C:\Temp\pdffen\quell\'; sZiel := 'C:\Temp\pdffen\'; sDll := 'C:\Temp\pdffen\'; AConverter := TGS_PdfConverter.Create(sDll); FLogFile := TStringList.Create; try try AConverter.OnStdOut := Log; // komplette Debug Ausgabe AConverter.OnStdError := Log; {$IFDEF DEBUG} AConverter.Debug := True; // Das kannst du später entfernen {$ENDIF} AFiles := sQuelle + '0174163013.pdf;' + sQuelle + '0174163020.pdf;' + sQuelle + '0174164010.pdf;' + sQuelle + '0174164027.pdf;' + sQuelle + '0174164034.pdf;' + sQuelle + '0174164041.pdf;' + sQuelle + '0174164065.pdf;' + sQuelle + '0174164072.pdf;' + sQuelle + '0174164089.pdf;' + sQuelle + '0174164096.pdf;' + sQuelle + '0174164119.pdf;' + sQuelle + '0174165024.pdf;' + sQuelle + '0174165031.pdf;' + sQuelle + '0174165048.pdf;' + sQuelle + '0174165055.pdf;' + sQuelle + '0174165062.pdf;' + sQuelle + '0174166014.pdf;' + sQuelle + '0174167011.pdf;' + sQuelle + '0174167028.pdf;' + sQuelle + '0174167035.pdf;' + sQuelle + '0174167042.pdf;' + sQuelle + '0174167059.pdf;' + sQuelle + '0174167066.pdf;' + sQuelle + '0174167073.pdf;' + sQuelle + '0174167080.pdf;' + sQuelle + '0174167097.pdf;' + sQuelle + '0174167103.pdf;' + sQuelle + '0174167110.pdf;' + sQuelle + '0174167127.pdf;' + sQuelle + '0174167134.pdf;' + sQuelle + '0174167141.pdf;' + sQuelle + '0174167158.pdf;' + sQuelle + '0174168018.pdf;' + sQuelle + '0174168025.pdf;' + sQuelle + '0174168032.pdf;' + sQuelle + '0174169015.pdf;' + sQuelle + '0174170011.pdf'; if (not AConverter.ToPdf(AFiles.Split([';']), sZiel + 'New01.pdf', False)) then begin ShowMessage('Fehler: ' + AConverter.LastErrors); FLogFile.SaveToFile(sZiel + 'output.log'); end else ShowMessage('Convertierung abgeschlossen!'); except on E: Exception do ShowMessage('Fehler: ' + E.Message); end; finally FreeAndNil(AConverter); FreeAndNil(FLogFile); end; end; procedure TfrmGsTst.Log(const AStr: string); begin (* hier bekommst du die gefilterten informationen + debug information *) // als output in einem Memo M_Output.Lines.Text := M_Output.Lines.Text + AStr; // als output in eine Datei FLogFile.Text := FLogFile.Text + AStr; // scroll down M_Output.SelStart := Length(M_Output.Lines.Text); M_Output.SelLength := 0; end; Allen ein schönes Wochenende Beste Grüße |
AW: PDF-Dateien drucken (viele)
Statt der vielen sQuelle hätte ich ein Zeichen (z.B. *) und dann Replace gemacht,
aber wozu erst zusammen und dann split, wenn man es auch gleich fertig haben kann. :wink:
Delphi-Quellcode:
oder falls später stückchenweise, via Schleife und so.
AFiles: TArray<string>;
begin AFiles := [sQuelle + '0174163013.pdf', sQuelle + '0174163020.pdf', sQuelle + '0174164010.pdf', sQuelle + '0174164027.pdf', sQuelle + '0174164034.pdf', ... ];
Delphi-Quellcode:
AFiles := AFiles + [sQuelle + '0174163013.pdf'];
... AFiles := AFiles + [sQuelle + '0174163020.pdf', sQuelle + '0174164010.pdf']; ...
Delphi-Quellcode:
M_Output.Lines.Add(AStr); // geht auch mit Zeilenumbrüchen drin (und auch unnötig erst ALLEN Text rauszuholen und wieder neu reinzuzun)
// und SelStart ist auch nicht nötig, weil macht Add schon |
AW: PDF-Dateien drucken (viele)
Zitat:
Deswegen ist das Ganze über die Text property gelöst. Edit: Das einzige was ich noch dagegen machen könnte um dies benutzerfreundlich zu gestalten, wäre einen internen Text Puffer zu verwenden und nur ganze Zeilen auszugeben. Das werde ich mir gleich mal auf meine ToDo Liste schreiben. |
AW: PDF-Dateien drucken (viele)
Hallo Zusammen!
Die Lösung von itblumi läuft sehr gut! Was nicht funktionierte, war die Angabe eines UNC-Pfades für den Quell-Ort der zusammen zu fassenden PDF-Dokumente. Aber über ein gemapptes Laufwerk kein Problem. Insgesamt ist das eine gute, auch sehr perfomante Lösung für unser Druckproblem. Beste Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz