Generieren von PDFs mit Bildern viel zu langsam

9

Ein großer Engpass, den ich im Moment habe, ist die PDF-Generierung jedes Mal, wenn jemand eine Bestellung aufgibt. Es ist keine große Sache für eine einzelne Bestellung, aber wenn es viel in einem kurzen Zeitrahmen gibt, ist dieser Prozess sehr langsam.

Das PDF benötigt Textinformationen, einen QR-Code, einen Barcode, ein Logo und 1 oder mehr (bis zu 20 +) 1/4-breite Bilder.

Aktueller Prozess mit DOMPDF:

  1. QR Code Bild erstellt mit PHP und gespeichert als PNG
  2. Barcode-Bild erstellt und gespeichert als PNG
  3. DomPDF generiert PDF

Neuer Gedanke:

  1. HTML2PDF erstellt PDF und verwendet seine QR- und Barcode-Tags zur Erzeugung der Barcodes

Das würde sich theoretisch um die QR- und Barcode-Bilder kümmern, aber trotzdem machen die restlichen Bilder es zu langsam.

Wenn Sie so vorgehen, ohne andere Bilder als die (QR und Barcode), kann die PDF in ~ 500ms erzeugt werden, aber sobald ich mit dem Hinzufügen von Bildern beginne, geht es auf 2, 3, 4, 5+ Sekunden jeweils.

Beim Ausführen von Tests und der Verarbeitung von ~ 10k Bestellungen (in ein paar Minuten) wurden die PDFs noch rund 12 Stunden später verarbeitet, bis ich sie einfach frustriert heruntergefahren habe.

Das PDF wird in einem separaten Warteschlangenprozess generiert, so dass die Person nicht auf die Bestellung warten muss, aber - es kann immer noch nicht mehr als 5 Stunden dauern, bis sie ihre Bestätigungs-PDF bei hohem Traffic erhalten.

Fragen / TLDR:

Wie kann ich meinen Prozess zum Erstellen von PDFs mit einem dynamischen QR-Code, einem dynamischen Barcode, dynamischem Text und statischen 1-20-Bildern (Bilder sind in allen PDFs gleich) schneller machen?

Gibt es andere mögliche Dinge, an die ich nicht gedacht habe? Vielleicht ein Template-PDF erstellen und irgendwie PHP verwenden, um nur die dynamischen Spots auszufüllen?

    
Dave 16.09.2014, 01:45
quelle

2 Antworten

4

Ich würde Ihnen dringend empfehlen, die TCPDF-Bibliothek zu verwenden. Es ist ziemlich schnell und kann leicht in CakePHP integriert werden. Sie können viele Beispiele dafür finden, wie Sie Bilder, Barcodes und QR-Codes in PDFDF-Beispiele Seite einfügen können.

Um die Leistung weiter zu verbessern, verwenden Sie Tipps von dieser Seite:

  • Installieren und konfigurieren Sie einen PHP-Opcode-Cacher wie XCache;
  • Bearbeiten Sie die php.ini-Datei und erhöhen Sie die maximale Speichermenge, die ein Skript verbrauchen kann (memory_limit);
  • Bearbeiten Sie die Datei php.ini und erhöhen Sie die maximale Ausführungszeit jedes Skripts (max_execution_time);
  • Bearbeiten Sie die Datei config / tcpdf_config.php: Setzen Sie die Konstanten $ _SERVER ['DOCUMENT_ROOT'], K_PATH_MAIN und K_PATH_URL manuell und entfernen Sie den automatischen Berechnungsteil;
  • Wenn Sie nicht die Sprache Thai verwenden, bearbeiten Sie die Datei config / tcpdf_config.php und setzen Sie die Konstante K_THAI_TOPCHARS auf false;
  • Wenn Sie keine erweiterten Zeichen benötigen, bearbeiten Sie die Datei config / tcpdf_config.php und setzen Sie die Standardschriftarten auf die Kernschriftarten;
  • Wenn Sie UTF-8 Unicode nicht benötigen, setzen Sie den Parameter $ unicode des TCPDF-Konstruktors auf false und den $ -Codierungsparameter auf 'ISO-8859-1' oder eine andere Zeichentabelle.
  • Standardmäßig aktiviert TCPDF die Zeichensatzteilmenge, um die Größe eingebetteter Unicode-TTF-Zeichensätze zu reduzieren. Dieser Prozess, der sehr langsam ist und viel Speicher erfordert, kann mit der setFontSubsetting (false) -Methode ausgeschaltet werden;
  • Verwenden Sie nach Möglichkeit Kernfonts anstelle von eingebetteten Fonts;
  • Vermeiden Sie die HTML-Syntax (writeHTML und writeHTMLCell-Methoden), wenn dies nicht unbedingt erforderlich ist;
  • Split große HTML-Blöcke in kleineren Stücken;
  • Vermeiden Sie Transaktionen, wenn dies nicht unbedingt erforderlich ist;
  • Starten Sie den Webserver nach Änderungen neu.

Wenn dies die Leistung nicht auf das akzeptable Niveau verbessert, können Sie Ihre CakePHP-Anwendung (oder nur das Skript, das die Generierung von PDFs ausführt, wenn CakePHP nicht verwendet wird) auf einem zweiten Server mit mehr verfügbaren Ressourcen installieren und verwenden Server nur für die PDF-Generierung.

    
bancer 16.09.2014, 21:19
quelle
0

TCPDF ist auch sehr langsam mit Bildern

    
user2573099 11.02.2017 06:31
quelle