Delphi-PRAXiS
Seite 3 von 3     123   

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)

himitsu 18. Nov 2022 09:59

AW: PDF-Dateien drucken (viele)
 
Zitat:

Zitat von josef-b (Beitrag 1514964)
Wir speichern PDF-Belege mittlerweile alle in der firebird-Datenbank als Blob..

Das wird hier aber nicht helfen.
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:

Zitat von rokli (Beitrag 1514888)
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.

:zwinker:

Die Begleitpapiere müssen also so oder so.
Eventuell könne man sowas auch direkt auf die Verpackung drucken. (innen und außen)
https://www.bluhmsysteme.com/oberfla...schriften.html
Bei Google suchenmobile Handdrucker
Bei Google suchenPrinCube Bei Google suchenMBrush

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:

Zitat von josef-b (Beitrag 1514964)
Kommt halt auf die Bedürfnisse des Anwenders an ;-)

Bei uns genau andersrum. Es war mal Alles in der DB und ist nun in einzelnen Dateien.
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.

josef-b 18. Nov 2022 10:25

AW: PDF-Dateien drucken (viele)
 
Ja dann würde ich es wohl mit sumatra machen.

rokli 18. Nov 2022 12:04

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.

itblumi 18. Nov 2022 12:21

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:
if (AConverter.Print('Dateien mit ; getrennt einfügen', 'Windows Drucker Name', False)) then ...
oder
Delphi-Quellcode:
if (AConverter.Print(aFiles, 'Windows Drucker Name', False)) then ...
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.

rokli 18. Nov 2022 12:38

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?

itblumi 18. Nov 2022 12:48

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.

rokli 18. Nov 2022 14:18

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:
AConverter.ToPdf
zur Verfügung gestellt werden muss.

Zum Nachvollziehen die beiden wesentlichen Proceduren:

Delphi-Quellcode:
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;
Meinen besondereren Dank and Jan, der sich viel Mühe mit mir gegeben hat.

Allen ein schönes Wochenende

Beste Grüße

himitsu 18. Nov 2022 14:32

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:
  AFiles: TArray<string>;
begin

      AFiles := [sQuelle + '0174163013.pdf',
                 sQuelle + '0174163020.pdf',
                 sQuelle + '0174164010.pdf',
                 sQuelle + '0174164027.pdf',
                 sQuelle + '0174164034.pdf',
                 ...
                ];
oder falls später stückchenweise, via Schleife und so.
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

itblumi 18. Nov 2022 14:41

AW: PDF-Dateien drucken (viele)
 
Zitat:

Zitat von himitsu (Beitrag 1515011)
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

Das ist richtig, aber leider liefert Ghostscript auch manchmal nur ein Stück von einer Zeile und dann ist die Ausgabe mehrfach unterteilt.
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.

rokli 28. Nov 2022 06:17

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 18:17 Uhr.
Seite 3 von 3     123   

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