Применение водяных знаков в pdf-файлах, когда пользователи пытаются загрузить файлы

Решения для моих заданий школы имеют водяные знаки в PDF-файлах с нашим именем пользователя на нем.

Мне было интересно, знаете ли вы, как сделать что-то подобное с помощью PHP? Выполняют ли сценарий перед процессом загрузки?

Благодарю.

Solutions Collecting From Web of "Применение водяных знаков в pdf-файлах, когда пользователи пытаются загрузить файлы"

Хотя есть несколько очень хороших PDF-библиотек для PHP, если бы я писал такую ​​программу, я бы просто выложил для запуска pdftk, но вам все равно нужно создать водяной знак.

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

Необходимо сделать это вчера, и вот как без каких-либо внешних не-PHP-библиотек, которые необходимо установить. Необходимы только две библиотеки lib и lib, и их легко получить.

Теперь вы можете использовать класс ниже для достижения водяных знаков

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

Теперь вы можете запустить это как:

 WaterMark::applyAndSpit($fileWithFullPath); 

Существует отличная библиотека php open source http://www.tcpdf.org/ , я использую ее для всех задач генерации PDF.