FPDF- und FPDI-Wasserzeichen werden in einem Winkel in X-Y-Richtung wiederholt.
P粉198814372
2023-08-06 20:11:40
<p>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). <br /><br />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. <br /><br />Haben Sie Hinweise, wo Sie anfangen sollen? <br /><br />Arbeitscode ab heute: </p><p><br /></p>
<pre class="brush:php;toolbar:false;"><?php
setasignFpdiFpdi verwenden;
require_once('vendor/autoload.php');
Die Klasse Watermarked_PDF erweitert Fpdi
{
Funktion Footer()
{
$this->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();</pre>
<p><em>Wasserzeichencode von hier: https://phppot.com/php/php-watermark-pdf/ und angepasst.<br /><br />Basis-Composer.json-Datei zum Testen: <br /></em></p><p><br />< /p> ;
<pre class="brush:php;toolbar:false;">{
"erfordern": {
"setasign/fpdf": "1.8.*",
„setasign/fpdi“: „^2.3“
}
}</pre>
<p>Vielen Dank</p>
我实际上找到了一个解决办法,但是它相当丑陋:
即使这个更新的循环并不是最优化的,它也能完成工作。我现在会按照这种方式继续工作,并根据我的需求进行调整。