在Drupal

时间:2015-07-28 18:51:51

标签: php pdf drupal drupal-7 watermark

我正在研究DRUPAL中的一个项目,我正在尝试以编程方式将图像添加到现有的pdf中 - 发票的“已批准”图像。我已经克服了StackExchange帖子中的代码 - How can I add a watermark to an existing PDF file using PHP? - 并且设法让它在Drupal(7.0)之外工作,但是一旦我将代码移植完毕,我什么都没得到,没有错误,没有警告,nadda。 ...只是想知道是否有人可以在这个问题上帮助我,它现在让我疯了一下......对于草率的代码感到抱歉....

<?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();
?>

值得注意的是,我也向所有可能有替代方法以实现相同最终结果的人开放

提前感谢!

1 个答案:

答案 0 :(得分:0)

因此,在接受Marc 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();
?>