Les solutions pour les missions de mon école ont tous des waterstamps sur les PDF avec notre nom d'utilisateur sur celui-ci. P>
Je me demandais si vous savez comment faire quelque chose comme ça en utilisant php? Exécutent-ils un script avant le processus de téléchargement? P>
merci. p>
4 Réponses :
Il existe une excellente bibliothèque PHP OpenSource http://www.tcpdf.org/ , je l'utilise pour toutes les tâches génératrices de PDF. p>
Bien qu'il y ait plusieurs très bons Libs PDF pour PHP, si j'écris un tel programme, je déboutitais simplement à courir PDFTK Mais vous devez toujours générer votre filigrane.
$tempfile=tempnam();
system("pdftk input_file.pdf background watermark.pdf output $tempfile dont_ask", $errcode);
if (!$errcode && $ih=fopen($tempfile, 'r')) {
header('Content-Type: application/pdf');
fpassthru($ih);
fclose($ih);
} else {
print "Whoops";
}
unlink($tempfile);
Nécessaire pour le faire hier et voici comment sans aucune libs externe non PHP qui doit être installée. Les seules libres que 2 libres nécessaires sont à la fois des libs PHP et sont faciles à obtenir.
Vous pouvez maintenant utiliser la classe ci-dessous pour atteindre le filigrane P> Vous pouvez maintenant exécuter ceci comme suit: p>
J'ai utilisé cela et obtenez toutes les pages affichant sur la première page. J'ai pu résoudre ce problème en ajoutant $ ceci-> pdf-> addpage (); code> à la fin de la boucle dans dowatermark () code>. J'ai fait d'autres changements mineurs, donc je ne suis pas confiant de modifier votre réponse, mais cela peut aider si d'autres ont ce problème.
J'ai corrigé ce code en réponse à cette question
Merci pour le code. Quelques petites choses que j'ai trouvées jusqu'à présent en gardant cela d'être plug-n-jeu. La commande "Exécuter cette" commande a besoin de deux arguments: Watermark :: Applkandspit ($ FileWithbithfullPath, $ newfilenamewithfu llpath); et la classe utilise = &, qui est obsolète dans PHP actuel, il suffit d'utiliser =.
Voici les étapes que j'ai essayées avec le marquage de l'eau à l'aide de FPDI:
<?php
use setasign\Fpdi\Fpdi;
use setasign\Fpdi\PdfReader;
function PlaceWatermark($file, $text, $xxx, $yyy, $op, $outdir) {
require_once('fpdi/vendor/autoload.php');
require_once 'fpdi/vendor/setasign/fpdf/fpdf.php';
function copyTransparent($src, $output)
{
$dimensions = getimagesize($src);
$x = $dimensions[0];
$y = $dimensions[1];
$im = imagecreatetruecolor($x,$y);
$src_ = imagecreatefrompng($src);
// Prepare alpha channel for transparent background
$alpha_channel = imagecolorallocatealpha($im, 255, 255, 255, 127);
imagecolortransparent($im, $alpha_channel);
// Fill image
imagefill($im, 0, 0, $alpha_channel);
// Copy from other
imagecopy($im,$src_, 0, 0, 0, 0, $x, $y);
// Save transparency
imagesavealpha($im,true);
// Save PNG
imagepng($im,$output,9);
imagedestroy($im);
}
$png = 'https://www.office-deals.nl/images/logo_60x37.png';
copyTransparent($png,"png.png");
$imageURL = 'png.png';
$imgWidth = 20;
$pdf = new FPDI();
if (file_exists("./".$file)){
$pagecount = $pdf->setSourceFile($file);
} else {
return FALSE;
}
for($i=1; $i <= $pagecount; $i++) {
$tpl = $pdf->importPage($i);
$pdf->addPage();
$pdf->useTemplate($tpl, 5, 5);
$pdf->Image($imageURL, $xxx, $yyy,'png');
}
if ($outdir === TRUE){
return $pdf->Output($file,'I');
} else {
return $pdf->Output();
}
}
$images='https://www.office-deals.nl/images/logo_60x37.png';
PlaceWatermark("laravel.pdf", $images, 180, 275, 100,TRUE);
?>
Leur script Downloader attrape probablement votre nom d'utilisateur, crée une image de base et utilise la bibliothèque
pdf_php code> pour calquer cette image en haut du PDF.Comment générez-vous (ou planifiez-vous) les PDF? Si vous n'avez pas encore rien fait, consultez WebKit vers PDF: code.google.com/ p / wkhtmltopdf