Wkhtmltopdf-Caching-Optionen in Laravel-Jobwarteschlangen verursachen Konfigurationsprobleme
Posted: 16 Jan 2025, 08:51
Ich verwende wkhtmltopdf in meiner Laravel-Anwendung, um PDFs zu generieren. Ich habe zwei verschiedene Funktionen, eine zum Drucken von Budgets und eine andere zum Drucken von Rechnungen. Diese werden als Jobwarteschlangen ausgeführt. Hier ist der Code für jede Funktion:
Budget-Druckcode:
Rechnungsdruckcode:
Das Problem:
Wenn ich ein Budget-PDF erstelle, werden die Ränder wie konfiguriert auf 0 gesetzt. Diese Konfiguration scheint jedoch bestehen zu bleiben und wirkt sich auf den Rechnungsdruckprozess aus, der eine andere Rand- und Ausrichtungskonfiguration verwendet.
Dieses Problem wird behoben, wenn ich den Warteschlangenarbeiter manuell neu starte, aber ich möchte es vermeiden den Worker jedes Mal neu starten. Es scheint, dass wkhtmltopdf globale Einstellungen zwischenspeichert oder beibehält, was zu Konflikten zwischen den Jobs führt.
Was ich versucht habe:Ich habe überprüft, ob jeder Job WKPDF unabhängig initialisiert, aber das Problem besteht weiterhin.
Ein Neustart des Workers behebt das Problem vorübergehend, aber das ist keine ideale Lösung.
Die Funktion setOptions() im Rechnungsdruckcode Scheint die zwischengespeicherten Optionen aus dem Budget-Druckcode nicht zu überschreiben.
Was ich brauche:
Wie kann ich sicherstellen, dass jeder Auftrag mit ausgeführt wird? seine eigene wkhtmltopdf-Konfiguration, ohne von früheren Jobs beeinflusst zu werden? Gibt es eine Möglichkeit, Konfigurationen für wkhtmltopdf in Laravel-Jobwarteschlangen zurückzusetzen oder zu isolieren?
Budget-Druckcode:
Code: Select all
$pdf = WKPDF::loadHtml($pdf_html);
$pdf->setPaper('a4');
$pdf->setOption('disable-smart-shrinking', true);
$pdf->setOption('margin-top', 0);
$pdf->setOption('margin-right', 0);
$pdf->setOption('margin-bottom', 0);
$pdf->setOption('margin-left', 0);
$pdf->setOption('encoding', "UTF-8");
$pdf->setOption('orientation', 'landscape');
$pdf->setOption('load-error-handling', "ignore");
$pdf->setOption('enable-local-file-access', true);
$pdf->save(($upload_path) . '/' . $file_name);
Code: Select all
$pdf = WKPDF::setOptions(['dpi' => 100, 'enable-local-file-access' => true, 'load-error-handling' => "ignore", 'encoding' => "UTF-8",])
->setPaper('a4', 'portrait')
->loadHTML($pdf_html)
->save($file_upload_path . '/' . $pdf_file_name);
Wenn ich ein Budget-PDF erstelle, werden die Ränder wie konfiguriert auf 0 gesetzt. Diese Konfiguration scheint jedoch bestehen zu bleiben und wirkt sich auf den Rechnungsdruckprozess aus, der eine andere Rand- und Ausrichtungskonfiguration verwendet.
Dieses Problem wird behoben, wenn ich den Warteschlangenarbeiter manuell neu starte, aber ich möchte es vermeiden den Worker jedes Mal neu starten. Es scheint, dass wkhtmltopdf globale Einstellungen zwischenspeichert oder beibehält, was zu Konflikten zwischen den Jobs führt.
Was ich versucht habe:Ich habe überprüft, ob jeder Job WKPDF unabhängig initialisiert, aber das Problem besteht weiterhin.
Ein Neustart des Workers behebt das Problem vorübergehend, aber das ist keine ideale Lösung.
Die Funktion setOptions() im Rechnungsdruckcode Scheint die zwischengespeicherten Optionen aus dem Budget-Druckcode nicht zu überschreiben.
Was ich brauche:
Wie kann ich sicherstellen, dass jeder Auftrag mit ausgeführt wird? seine eigene wkhtmltopdf-Konfiguration, ohne von früheren Jobs beeinflusst zu werden? Gibt es eine Möglichkeit, Konfigurationen für wkhtmltopdf in Laravel-Jobwarteschlangen zurückzusetzen oder zu isolieren?