10
votes

Application de filigranes sur les fichiers PDF lorsque les utilisateurs essaient de télécharger les fichiers

Les solutions pour les missions de mon école ont tous des waterstamps sur les PDF avec notre nom d'utilisateur sur celui-ci.

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?

merci.


2 commentaires

Leur script Downloader attrape probablement votre nom d'utilisateur, crée une image de base et utilise la bibliothèque pdf_php 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


4 Réponses :


2
votes

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.


0 commentaires

6
votes

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


0 commentaires

5
votes

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.


3 commentaires

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 (); à la fin de la boucle dans dowatermark () . 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 =.



0
votes

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


0 commentaires