FPDF- und FPDI-Wasserzeichen werden in einem Winkel in X-Y-Richtung wiederholt.
P粉198814372
P粉198814372 2023-08-06 20:11:40
0
1
396

Mit den Bibliotheken setasign/FPDF und setasign/FPDI muss ich jedem PDF-Dokument ein Wasserzeichen und eine benutzerdefinierte Fußzeilenüberlagerung hinzufügen (jede Seite muss mit einem Wasserzeichen versehen sein). Die Original-PDF-Datei wird auf dem Server gespeichert und der Vorgang muss erfolgen, wenn die Datei angefordert wird (da sie das Datum und die Uhrzeit der Anforderung enthält).

Dank des folgenden Codes konnte ich die erforderliche Fußzeile einschließlich des gewünschten Datums und der gewünschten Uhrzeit erfolgreich hinzufügen. Der Code druckt auch ein einzelnes Vorkommen des Wasserzeichens diagonal über die Seite, aber ich hätte wirklich gerne ein anderes Verhalten: die diagonale Wiederholung der Zeichenfolge, wie in diesem Bild gezeigt (z. B. werden meine Zeichenfolgen dynamisch generiert). Es spielt keine Rolle, ob die Zeichenfolge „außerhalb“ der Seite beginnt oder endet, solange sie sich in mehreren Zeilen wiederholt und diese Zeilen den gleichen Abstand haben müssen.

Haben Sie Hinweise, wo Sie anfangen sollen?

Arbeitscode ab heute:


SetY(-10); $this->SetFont('Arial', false, 8); $this->SetTextColor(28, 28, 28); $this->Cell(0, 15, 'Datei angefordert am: ' . date('r'), 0, 0, 'C'); } } Funktion addWatermark($x, $y, $watermarkText, $angle, $pdf) { $angle = $angle * M_PI / 180; $c = cos($angle); $s = sin($angle); $cx = $x * 1; $cy = (300 - $y) * 1; $pdf->_out(sprintf('q %.5F %.5F %.5F %.5F %.2F %.2F cm 1 0 0 1 %.2F %.2F cm', $c, $s, - $s, $c, $cx, $cy, -$cx, -$cy)); $pdf->Text($x, $y, $watermarkText); $pdf->_out('Q'); } $pdf = new Watermarked_PDF(); $file_Path = 'Dokumente/'; $file_Name = '13825_2023-07-04'; $pages_count = $pdf->setSourceFile($file_Path . $file_Name . '.pdf'); for ($i = 1; $i <= $pages_count; $i++) { $pdf->AddPage(); $tplIdx = $pdf->importPage($i); $pdf->useTemplate($tplIdx, 0, 0); $pdf->SetFont('Arial', 'B', 15); $pdf->SetTextColor(175, 175, 175); $watermarkText = 'file #' . $file_Name . ' - Eigenschaft des Unternehmens'; addWatermark(120, 220, $watermarkText, 45, $pdf); $pdf->SetXY(25, 25); } $pdf->Output();

Wasserzeichencode von hier: https://phppot.com/php/php-watermark-pdf/ und angepasst.

Basis-Composer.json-Datei zum Testen:


< /p> ;

{ "erfordern": { "setasign/fpdf": "1.8.*", „setasign/fpdi“: „^2.3“ } }

Vielen Dank

P粉198814372
P粉198814372

Antworte allen (1)
P粉731861241

我实际上找到了一个解决办法,但是它相当丑陋:

for ($i = 1; $i <= $pages_count; $i++) { $pdf->AddPage(); $tplIdx = $pdf->importPage($i); $pdf->useTemplate($tplIdx, 0, 0); $pdf->SetFont('Arial', 'B', 15); $pdf->SetTextColor(175, 175, 175); $watermarkText = 'file #' . $file_Name . ' - propery of company'; addWatermark(0, 0, $watermarkText, 45, $pdf); addWatermark(0, 50, $watermarkText, 45, $pdf); addWatermark(0, 100, $watermarkText, 45, $pdf); addWatermark(0, 150, $watermarkText, 45, $pdf); addWatermark(0, 200, $watermarkText, 45, $pdf); addWatermark(0, 250, $watermarkText, 45, $pdf); addWatermark(0, 300, $watermarkText, 45, $pdf); addWatermark(0, 350, $watermarkText, 45, $pdf); addWatermark(0, 400, $watermarkText, 45, $pdf); addWatermark(0, 450, $watermarkText, 45, $pdf); $pdf->SetXY(25, 25); }

即使这个更新的循环并不是最优化的,它也能完成工作。我现在会按照这种方式继续工作,并根据我的需求进行调整。

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!