IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PDF文件处理 之 添加水印 -> 正文阅读

[PHP知识库]PDF文件处理 之 添加水印

1、寻找合适的工具

  • PHP版本的插件
插件描述
binarystash/pdf-watermarker只支持简单水印,不支持透明度设置,不支持平铺
uvinum/pdf-watermarker图片试了一下没成功,使用起来比较复杂
setasign/fpdf,setasign/fpdi可添加文字、图片
插件描述
pdfcpuCLI添加水印会被图片盖住,API方式可以添加,支持调整透明度,倾斜
unidoc/unipdf需要付费 不多介绍
  • 试了几个插件,发现中文都容易乱码,文字水印都不支持平铺,为了更好地实现效果,只能做一张水印图片,使用图片水印的方式, 综合考虑 选取了 setasign/fpdf,setasign/fpdi 和 pdfcpu 去实现功能。

2、PHP实现添加水印实例

  • 1、引入库
composer require setasign/fpdf
composer require setasign/fpdi
  • 2、引用命名空间
require_once(__DIR__ . "/../vendor/setasign/fpdf/Fpdf.php");
require_once(__DIR__ . "/../vendor/setasign/fpdi/src/autoload.php");
  • 3、创建图片水印
class PdfWater
{
    function addImageWater($oldFile, $newFile, $waterFile)
    {
        $pdf = new Fpdi();
        
        $pageCount = $pdf->setSourceFile($oldFile);//获取页数
        
        for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {//遍历所有页面
            
            $templateId = $pdf->importPage($pageNo);//导入页面
           
            $size = $pdf->getTemplateSize($templateId); //获取导入页面的大小
            
            if ($size['width'] > $size['height']) {//创建页面(横向或纵向取决于导入的页面大小)
                $pdf->AddPage('L', array($size['width'], $size['height']));
            } else {
                $pdf->AddPage('P', array($size['width'], $size['height']));
            }
            $pdf->useTemplate($templateId);//导入页面
			
            $pdf->image($waterFile, 0, 0, $size['width'],$size['height']);//全屏背景图片水印
        }
        
        $pdf->Output('F', $newFile, false);//I输出output,D下载download,F保存file_put_contents,S返回return
    }
}
  • 4、写入文字水印
 function addTxtWater($oldFile, $newFile, $waterText)
    {
        $pdf = new Fpdi(); 
        $pageCount = $pdf->setSourceFile($oldFile); 
        for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) { 
            $templateId = $pdf->importPage($pageNo); 
            $size = $pdf->getTemplateSize($templateId); 
            if ($size['width'] > $size['height']) {
                $pdf->AddPage('L', array($size['width'], $size['height']));
            } else {
                $pdf->AddPage('P', array($size['width'], $size['height']));
            } 
            $pdf->useTemplate($templateId);//使用导入的页面
            
            $pdf->SetFont('Arial', 'B', '24');//设置字体
            $family = ['courier', 'helvetica', 'times', 'symbol', 'zapfdingbats'];
            $pdf->SetFont('helvetica', 'U', '50');
            $pdf->SetXY($size['width'], $size['height']);
            $pdf->Write(7, $waterText);//写入水印 - 中文会乱码 建议使用中文图片

        }
        $pdf->Output('F', $newFile, false); //I输出output,D下载download,F保存file_put_contents,S返回return
    }

3、GO语言实现PDF添加水印

  • 使用API
package main
import (
 "github.com/pdfcpu/pdfcpu/pkg/api"
 "github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
)
func main() {
 oldFile:="/Users/tal/Desktop/1.pdf"
 newFile:="/Users/tal/Desktop/output.pdf"
 waterFile:="/Users/tal/Desktop/eye.png"
 water(oldFile,newFile,waterFile)
}
func water(oldFile string,newFile string,waterFile string) {
 onTop := true
 wm, _ := pdfcpu.ParseImageWatermarkDetails(waterFile, "sc:4 abs, d:1, op:.4, pos:c", onTop,1)
 api.AddWatermarksFile(oldFile, newFile, nil, wm, nil)
}
  • 使用CLI
/CLI pdfcpu watermark add -mode image '/Users/tal/Desktop/eye.png' 's:1 abs, rot:0' /Users/tal/Desktop/1.pdf /Users/tal/Desktop/output.pdf

源代码分享

  • https://github.com/CiaraLi/pdf-demo.git
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-09 17:26:38  更:2021-07-09 17:27:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 1:36:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码