Intereting Posts
http_build_query с теми же параметрами имени храните XMLHttpRequest.responseText как переменную :( Добавить ошибку в элемент формы Symfony 2 Различное поведение функции uasort в PHP 5.5 и PHP 7.0 shell_exec () возвращает значение null на "ls" конвертировать XML-данные в mysql-запрос на вставку / обновление, используя php доступ к сессии joomla в php – codeigniter Отправка XML-данных с использованием HTTP POST с PHP Как прослушивать многоточечные потоки TCP непрерывно потоковым_get_contents ()? токенизация метафила переписать URL-адрес при отправке формы Создание XML с использованием CodeIgniter PHP: как я могу заблокировать прямой доступ к URL-адресу для файла, но все-таки разрешить его загрузку вошедшим в систему пользователям? PHP: преобразовать специфические боснийские символы в не-боснийские (стандартные символы utf8) Propel.xml дает мне ошибку – Недопустимый тип для пути "propel.database.connections.cfs.attributes". Ожидаемый массив, но получил строку

Как добавить водяной знак в существующий файл PDF с помощью PHP?

Мне нужно добавить водяной знак в существующий файл PDF с помощью PHP. Я искал в Google для этого, но не смог найти подходящую библиотеку.

Я нашел библиотеку fpdf, которая создает миниатюры предварительного просмотра PDF-файлов, но я не знаю, добавляет ли она водяные знаки в существующие файлы PDF или нет. Может ли кто-нибудь предложить библиотеку PHP, чем показать предварительный просмотр и добавить водяные знаки в существующие файлы PDF?

Related of "Как добавить водяной знак в существующий файл PDF с помощью PHP?"

Просто быстрый пример с использованием FPDF и классов FPDI:

function PlaceWatermark($file, $text, $xxx, $yyy, $op, $outdir) { require_once('fpdf.php'); require_once('fpdi.php'); $name = uniqid(); $font_size = 5; $ts=explode("\n",$text); $width=0; foreach ($ts as $k=>$string) { $width=max($width,strlen($string)); } $width = imagefontwidth($font_size)*$width; $height = imagefontheight($font_size)*count($ts); $el=imagefontheight($font_size); $em=imagefontwidth($font_size); $img = imagecreatetruecolor($width,$height); // Background color $bg = imagecolorallocate($img, 255, 255, 255); imagefilledrectangle($img, 0, 0,$width ,$height , $bg); // Font color $color = imagecolorallocate($img, 0, 0, 0); foreach ($ts as $k=>$string) { $len = strlen($string); $ypos = 0; for($i=0;$i<$len;$i++){ $xpos = $i * $em; $ypos = $k * $el; imagechar($img, $font_size, $xpos, $ypos, $string, $color); $string = substr($string, 1); } } imagecolortransparent($img, $bg); $blank = imagecreatetruecolor($width, $height); $tbg = imagecolorallocate($blank, 255, 255, 255); imagefilledrectangle($blank, 0, 0,$width ,$height , $tbg); imagecolortransparent($blank, $tbg); if ( ($op < 0) OR ($op >100) ){ $op = 100; } imagecopymerge($blank, $img, 0, 0, 0, 0, $width, $height, $op); imagepng($blank,$name.".png"); // Created Watermark Image $pdf = new FPDI(); if (file_exists("./".$file)){ $pagecount = $pdf->setSourceFile($file); } else { return FALSE; } $tpl = $pdf->importPage(1); $pdf->addPage(); $pdf->useTemplate($tpl, 1, 1, 0, 0, TRUE); //Put the watermark $pdf->Image($name.'.png', $xxx, $yyy, 0, 0, 'png'); if ($outdir === TRUE){ return $pdf->Output(); } else { return $pdf; } } PlaceWatermark("filename.pdf", "This is a lazy, but still simple test\n This should stand on a new line!", 30, 120, 100,TRUE); 

Использование: PlaceWatermark($filename, $text, $x, $y, $opacity, $directoutput);

$filename – путь к PDF-файлу, в который вы хотите поместить водяной знак
$text$text водяного знака, который вы хотите добавить
$x – x, где вы хотите поместить водяной знак
$y – y, где вы хотите поместить водяной знак
$opacity – непрозрачность текста
$directoutput – Если TRUE функция выведет PDF-файл, иначе он вернет $ pdf
Как я уже сказал, это очень быстрый и грязный пример, он нуждается в некоторых улучшениях.

Для всех, кто наткнулся на этот пост, вы можете создавать больше страниц, используя цикл for

 for($i=1; $i <= $pagecount; $i++) { $tpl = $pdf->importPage($i); $pdf->addPage(); $pdf->useTemplate($tpl, 1, 1, 0, 0, TRUE); //Put the watermark $pdf->Image($name.'.png', $xxx, $yyy, 0, 0, 'png');} 

получил его с помощью Марка здесь, мы поедем http://www.fpdf.de/downloads/addons/9/, если вы, ребята, думаете, что да, я буду отмечать свой ответ как победитель.

Спасибо Jyelton за ответ на мой вопрос, похоже, что поток стека неактивен ….

  /* index.php */ require('rotation.php'); class PDF extends PDF_Rotate{ protected $_outerText1;// dynamic text protected $_outerText2; function setWaterText($txt1="", $txt2=""){ $this->_outerText1 = $txt1; $this->_outerText2 = $txt2; } function Header(){ //Put the watermark $this->SetFont('Arial','B',40); $this->SetTextColor(255,192,203); $this->SetAlpha(0.5); $this->RotatedText(35,190, $this->_outerText1, 45); $this->RotatedText(75,190, $this->_outerText2, 45); } function RotatedText($x, $y, $txt, $angle){ //Text rotated around its origin $this->Rotate($angle,$x,$y); $this->Text($x,$y,$txt); $this->Rotate(0); } } $file = "path/filename.pdf";// path: file name $pdf = new PDF(); if (file_exists($file)){ $pagecount = $pdf->setSourceFile($file); } else { return FALSE; } $pdf->setWaterText("water M arkdemo ", "second L ineoftext"); /* loop for multipage pdf */ for($i=1; $i <= $pagecount; $i++) { $tpl = $pdf->importPage($i); $pdf->addPage(); $pdf->useTemplate($tpl, 1, 1, 0, 0, TRUE); } $pdf->Output(); //specify path filename to save or keep as it is to view in browser /* rotation.php */ require('fpdf.php'); require('fpdi.php'); class PDF_Rotate extends FPDI { var $angle=0; var $extgstates = array(); function Rotate($angle,$x=-1,$y=-1) { if($x==-1) $x=$this->x; if($y==-1) $y=$this->y; if($this->angle!=0) $this->_out('Q'); $this->angle=$angle; if($angle!=0) { $angle*=M_PI/180; $c=cos($angle); $s=sin($angle); $cx=$x*$this->k; $cy=($this->h-$y)*$this->k; $this->_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)); } } function _endpage() { if($this->angle!=0) { $this->angle=0; $this->_out('Q'); } parent::_endpage(); } function SetAlpha($alpha, $bm='Normal') { // set alpha for stroking (CA) and non-stroking (ca) operations $gs = $this->AddExtGState(array('ca'=>$alpha, 'CA'=>$alpha, 'BM'=>'/'.$bm)); $this->SetExtGState($gs); } function AddExtGState($parms) { $n = count($this->extgstates)+1; $this->extgstates[$n]['parms'] = $parms; return $n; } function SetExtGState($gs) { $this->_out(sprintf('/GS%d gs', $gs)); } function _enddoc() { if(!empty($this->extgstates) && $this->PDFVersion<'1.4') $this->PDFVersion='1.4'; parent::_enddoc(); } function _putextgstates() { for ($i = 1; $i <= count($this->extgstates); $i++) { $this->_newobj(); $this->extgstates[$i]['n'] = $this->n; $this->_out('<</Type /ExtGState'); foreach ($this->extgstates[$i]['parms'] as $k=>$v) $this->_out('/'.$k.' '.$v); $this->_out('>>'); $this->_out('endobj'); } } function _putresourcedict() { parent::_putresourcedict(); $this->_out('/ExtGState <<'); foreach($this->extgstates as $k=>$extgstate) $this->_out('/GS'.$k.' '.$extgstate['n'].' 0 R'); $this->_out('>>'); } function _putresources() { $this->_putextgstates(); parent::_putresources(); } } 

попробуйте этот.modified скрипт из сценариев примера fpdf. Изменить: добавлена ​​непрозрачность, используйте $ this-> SetAlpha (0.5)