2015-07-28 2 views
0

Я работаю над проектом в DRUPAL и пытаюсь программно добавить изображение в существующий pdf-документ «Approved» для счетов-фактур. Я Frankensteined код из StackExchange сообщение - How can I add a watermark to an existing PDF file using PHP? - и им удалось заставить его работать за пределами Drupal (7.0), но как только я порт кода, я ничего не получаю, никаких ошибок, никаких предупреждений, nadda .... Просто интересно, если кто-то может мне помочь в этом вопросе, это сводит меня с ума на некоторое время в настоящее время .... к сожалению по поводу небрежного кода ....Водяной знак существующего PDF в Drupal

<?php 
global $user; 
ob_start(); 
$filename ="approved_".$user->name.".png"; 
$file = "2pages.pdf"; 
$op = 100; 
//////////////////////////////////////////////////////////////////////////// 
require('fpdf.php'); 
require('fpdi.php'); 
$text = "Text message for watermark goes here"; 
$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); 
$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, 1, 1, 0, 0, TRUE);  
    //Put the watermark 
    $pdf->Image($filename, 0, 0, 40, 25, 'png');} 
    ///////////////////////////////////////// 
    return $pdf->Output('test10.pdf', 'F'); 
//////////////////////////////////////////////////////////////////////////// 
ob_end_flush(); 
?> 

Следует отметить, что я также откроет вам кто-нибудь который может иметь альтернативный метод для достижения того же конечного результата

заранее!

+0

основной отладки: если вы не получите никаких сообщений (очевидно) ошибок, а затем начать засорять ваш код с отладочной, так что вы можете увидеть, если/когда он рвет. –

+0

Не знаете, насколько вы готовы пойти на альтернативный метод, но если вы можете использовать Python вместо PHP, есть несколько библиотек, которые могут это сделать для вас. Один из них, который я написал, называется [pdfrw] (https://github.com/pmaupin/pdfrw), и он включает некоторые примеры водяных знаков. –

ответ

0

Итак, после принятия некоторых рекомендаций от Марка B, я прошел через код и выделил проблему. Для тех, кто ищет ответ на этот вопрос, вот решение, которое я придумал ... Надеюсь, это поможет!

<?php 
ob_start(); 
function PlaceWatermark($file, $text, $xxx, $yyy, $op, $outdir) { 
global $user; 
require('fpdf.php'); 
require('fpdi.php'); 
$myfilename = 'approved_'.$user->name.'.png'; 

// Created Watermark Image 
$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, 1, 1, 0, 0, TRUE);  
    //Put the watermark 
    if (file_exists($myfilename)) { 
      $pdf->Image($myfilename, 0, 0, 40, 25, 'png'); 
    } else { 
      $pdf->Image('approved.png', 0, 0, 40, 25, 'png'); 
    } 
} 
///////////////////////////////////////// 
return $pdf->Output('test_output.pdf', 'F'); 

} 
PlaceWatermark("Original.pdf", "", 30, 120, 100,TRUE); 

ob_end_flush(); 
?> 

 Смежные вопросы

  • Нет связанных вопросов^_^