FPDI / FPDF: водяной знак и печать нескольких страниц
Я изменил этот вопрос стека:Применение водяных знаков к файлам PDF, когда пользователи пытаются загрузить файлы но я столкнулся с ошибкой, хотя был комментарий, в котором говорилось о том, как ее исправить, он был недостаточно подробным.
Вот код:
<code>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; $this->pdf->addPage(); $pagecount = $this->pdf->setSourceFile($currentFile); for($i = 1; $i <= $pagecount; $i++){ $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->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)); } } } header('Content-type: application/pdf'); //header('Content-Disposition: attachment; filename="downloaded.pdf"'); WaterMark::applyAndSpit('C:\xampp\htdocs\tst\test0.pdf','C:\xampp\htdocs\tst\output0.pdf'); </code>
Когда я загружаю PDF, который имеет более 2, все страницы объединяются в одну страницу. Я прикрепил изображение в этом посте.
Благодарю.