Watermark pdf files when users try to upload files

Solutions for my school assignments have watermarks in PDF files with our username on it.

I was wondering if you know how to do something like this using PHP? Do they execute the script before the boot process?

Thanks.

+7
php pdf pdf-generation watermark
source share
3 answers

Although there are some very good PDF libraries for PHP, if I were to write such a program, I would just rip it to run pdftk but you still need to create a watermark.

$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); 
+5
source share

It is necessary to do this yesterday and here, as without any external non-PHP libraries that need to be installed. Only two libs and libs are needed, and they are easy to get.

Now you can use the class below to achieve watermarks

 /** MAKE SURE TO HAVE THE INCLUDES RUNNING PROPERLY */ require_once('FPDF/fpdf.php'); require_once('FPDI/fpdi.php'); class WaterMark { public $pdf, $file, $newFile, $wmText = "STACKOVERFLOW"; /** $file and $newFile have to include the full path. */ public function __construct($file, $newFile) { $this->pdf =& new FPDI(); $this->file = $file; $this->newFile = $newFile; } /** $file and $newFile have to include the full path. */ public static function applyAndSpit($file, $newFile) { $wm = new WaterMark($file, $newFile); if($wm->isWaterMarked()) return $wm->spitWaterMarked(); else{ $wm->doWaterMark(); return $wm->spitWaterMarked(); } } /** @todo Make the text nicer and add to all pages */ public function doWaterMark() { $currentFile = $this->file; $newFile = $this->newFile; $pagecount = $this->pdf->setSourceFile($currentFile); for($i = 1; $i <= $pagecount; $i++){ $this->pdf->addPage(); $tplidx = $this->pdf->importPage($i); $this->pdf->useTemplate($tplidx, 10, 10, 100); // now write some text above the imported page $this->pdf->SetFont('Arial', 'I', 40); $this->pdf->SetTextColor(255,0,0); $this->pdf->SetXY(25, 135); $this->_rotate(55); $this->pdf->Write(0, $this->wmText); $this->_rotate(0); } $this->pdf->Output($newFile, 'F'); } public function isWaterMarked() { return (file_exists($this->newFile)); } public function spitWaterMarked() { return readfile($this->newFile); } protected function _rotate($angle,$x=-1,$y=-1) { if($x==-1) $x=$this->pdf->x; if($y==-1) $y=$this->pdf->y; if($this->pdf->angle!=0) $this->pdf->_out('Q'); $this->pdf->angle=$angle; if($angle!=0){ $angle*=M_PI/180; $c=cos($angle); $s=sin($angle); $cx=$x*$this->pdf->k; $cy=($this->pdf->h-$y)*$this->pdf->k; $this->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)); } } } 

Now you can run this as:

 WaterMark::applyAndSpit($fileWithFullPath); 
+4
source share

There is an excellent php open source library http://www.tcpdf.org/ , I use it for all PDF generation tasks.

+2
source share

All Articles