Les filigranes FPDF et FPDI sont répétés selon un angle dans la direction X-Y.
P粉198814372
2023-08-06 20:11:40
<p>À l'aide des bibliothèques setasign/FPDF et setasign/FPDI, je dois ajouter un filigrane et une superposition de pied de page personnalisée sur n'importe quel document PDF (chaque page doit être filigranée). Le fichier PDF original est stocké sur le serveur et le processus doit avoir lieu lorsque le fichier est demandé (car il contient la date et l'heure de la demande). <br /><br />J'ai ajouté avec succès le pied de page requis incluant la date et l'heure demandées, grâce au code suivant. Le code imprime également une seule occurrence du filigrane en diagonale sur la page, mais j'aimerais vraiment avoir un autre comportement : répéter la chaîne en diagonale, comme indiqué sur cette image (par exemple, mes chaînes sont générées dynamiquement). Peu importe que la chaîne commence ou se termine "à l'extérieur" de la page, du moment qu'elle se répète sur plusieurs lignes et que ces lignes doivent être espacées de manière équidistante. <br /><br />Savez-vous par où commencer ? <br /><br />Code fonctionnel à ce jour : </p><p><br /></p>
<pre class="brush:php;toolbar:false;"><?php
utilisez setasignFpdiFpdi ;
require_once('vendor/autoload.php');
la classe Watermarked_PDF étend Fpdi
{
fonction Pied de page()
{
$this->SetY(-10);
$this->SetFont('Arial', false, 8);
$this->SetTextColor(28, 28, 28);
$this->Cell(0, 15, 'Fichier demandé le : ' . date('r'), 0, 0, 'C');
}
}
fonction addWatermark($x, $y, $watermarkText, $angle, $pdf)
{
$angle = $angle * M_PI / 180 ;
$c = cos($angle);
$s = péché($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->Texte($x, $y, $watermarkText);
$pdf->_out('Q');
}
$pdf = nouveau Watermarked_PDF();
$file_Path = 'documents/';
$file_Name = '13825_2023-07-04';
$pages_count = $pdf->setSourceFile($file_Path . $file_Name . '.pdf');
pour ($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 ' - propriété de l'entreprise';
addWatermark(120, 220, $watermarkText, 45, $pdf);
$pdf->SetXY(25, 25);
}
$pdf->Sortie();</pre>
<p><em>Code de filigrane à partir d'ici : https://phppot.com/php/php-watermark-pdf/ et adapté.<br /><br />Fichier composer.json de base pour les tests : <br /></em></p><p><br />< /p> ;
<pre class="brush:php;toolbar:false;">{
"exiger": {
"setasign/fpdf": "1.8.*",
"setasign/fpdi": "^2.3"
}
}</pré>
<p>Merci</p>
En fait, j'ai trouvé une solution, mais c'est plutôt moche :
Même si cette boucle mise à jour n'est pas optimale, elle fait le travail. Je vais continuer à travailler de cette façon pour le moment et l'ajuster en fonction de mes besoins.