Les filigranes FPDF et FPDI sont répétés selon un angle dans la direction X-Y.
P粉198814372
P粉198814372 2023-08-06 20:11:40
0
1
471
<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>
P粉198814372
P粉198814372

répondre à tous(1)
P粉731861241

En fait, j'ai trouvé une solution, mais c'est plutôt moche :

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);
}

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal