400-800-9385
网站建设资讯详细

php程序如何在pdf文档上加上水印

发表日期:2020-08-12 09:12:00   作者来源:刘红旺   浏览:4997   标签:    
项目需求:在后台上传的pdf上自动加上水印,防止别人盗用,在一定程度上可以起到保护作用,以前没有做过只有在图片上加水印,分享一下百度的案例;
需要用到的插件
fpdf
fpdi
下面github地址可以在项目中下载这两个文件
https://github.com/laiyuxiang/pdf_watermark/ 

水印插件

1.添加图片水印
        vendor('fpdf.fpdf',"",".php");//引入文件
        vendor('fpdi.fpdi',"",".php");//引入文件
        $pdf = new \FPDI();
        $pageCount = $pdf->setSourceFile($file);//文件地址
        for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++)
        {
        $templateId = $pdf->importPage($pageNo);
        // 获取导入页面的大小      
  $size = $pdf->getTemplateSize($templateId);
        //创建页面(横向或纵向取决于导入的页面大小)
        if ($size['w'] > $size['h']) $pdf->AddPage('L', array($size['w'], $size['h']));
        else $pdf->AddPage('P', array($size['w'], $size['h']));
        // use the imported page
        $pdf->useTemplate($templateId);
 
        // 放置图形     
   $pdf->image($img, 75, 85, 50);\\img水印图片,后面的是水印在pdf中坐标
 
        }
        $pdf->Output($file_dir.$file_url);
 
二、加文字水印
      vendor('fpdf.fpdf',"",".php");
 vendor('fpdi.fpdi',"",".php");
    $pdf = new \FPDI();//初始
    //文件地址
    $pageCount = $pdf->setSourceFile($file);
    for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++)
    {
        // 导入pdf
        $templateId = $pdf->importPage($pageNo);
        // 获取pdf的大小
        $size = $pdf->getTemplateSize($templateId);
    
        // 创建页面(横向或纵向取决于导入的页面大小)
        if ($size['w'] > $size['h']) $pdf->AddPage('L', array($size['w'], $size['h']));
        else $pdf->AddPage('P', array($size['w'], $size['h']));
     $pdf->SetFont('Arial','B','12');//设置文字的字号字
     $pdf->SetXY(0, 0); // 文字所在位置这个x,y值,自己调
      $pdf->Write(7, '1111');//写入内容大小
    }
     $pdf->Output('word.pdf');
这样就可以,原图效果如下:

水印1

导出图片如下:
 

水印2

如图达到了在图片上加上图片印章的效果:


 
下面是加上文字的效果:
 

水印3


 
感觉还是加图片效果更好。而且中文会乱码,这个问题没有去解决因为我只需要加图片水印,猜想应该是页面编码和 arial字体原因。
 

水印4



  $pdf->Write(7,'这是水印');//写入内容大小
 header("Content-type: text/html; charset=utf-8");
定义了页面编码是utf-8 输出的文字还是乱码
 

水印5


 
  $pdf->SetFont('宋体','B','12');//设置文字的字号字
 
我尝试将字体改成中文的最后发现不支持
 
暂时没有找到解决方法。
如没特殊注明,文章均为方维网络原创,转载请注明来自https://www.szfangwei.cn/news/5818.html