不可不知的好用工具合集-pdf处理篇

这篇文章的主题是pdf处理相关的工具,我最喜欢的pdf处理工具是PDF24,它集成了多种功能,功能强大且易于使用。

PDF24 全功能实战教程


一、软件定位与核心优势

PDF24 是一款集「桌面端+在线工具」于一体的全能PDF处理工具,支持 50+ 种文档操作功能,特别在以下场景表现突出:

  • ✅ 多格式互转(PDF←→Word/Excel/PPT/图片等)
  • ✅ 批量文件处理(合并/拆分/压缩100+文件)
  • ✅ 智能OCR识别(扫描件转可编辑文本)
  • ✅ 敏感信息保护(密码加密/水印/红章)

二、双版本使用指南

方案1:在线工具(免安装)
  1. 访问 PDF24在线工具站
  2. 选择需要的功能(如「PDF合并」)
  3. 拖拽上传文件 → 调整参数 → 处理下载
方案2:桌面客户端(推荐专业用户)
  1. 下载安装
    官网下载 → 运行安装包 → 选择中文语言 
  2. 功能分类:转换工具、编辑工具、安全工具、OCR工具

三、核心功能分步详解

1. 文档合并与拆分

场景:将多个PDF合并为报告/拆解合同附件

操作类型具体步骤
合并文件① 打开工具 → 选择「合并PDF」
② 拖拽添加文件 → 拖动调整顺序
③ 点击「保存」生成新文档
拆分文件① 选择「拆分PDF」→ 上传文件
② 设置规则:按页数/按书签/自定义范围
③ 勾选「为每个分割创建独立文件」

💡 技巧:在「选项」中启用「智能识别目录拆分」,自动按标题层级分割文档


2. 格式转换实战

支持格式

- 转PDF:Word/Excel/PPT/图片/JPG/HTML
- PDF转出:Word(.docx)/Excel(.xlsx)/PPT(.pptx)/图片(.png)

操作演示(PDF转Word)

  1. 选择「PDF转Word」工具
  2. 上传文件 → 设置参数:
    {
      "保留版式": True,
      "图片压缩质量": 80%,
      "启用OCR识别": False  # 扫描件需开启
    }
    
  3. 下载可编辑的Word文档

⚠️ 注意:转换扫描件时需启用OCR引擎(需额外下载语言包)


3. 高级文档处理
功能深度应用场景
OCR识别识别扫描发票 → 提取金额/日期信息
压缩优化将100MB图纸压缩至10MB且保持清晰度
安全加密给投标文件添加「禁止打印+有效期密码」
表单处理自动识别PDF表格 → 导出为Excel数据集

命令行批量处理(适合IT人员):

pdf24-creator -task compress -input "C:\docs\*pdf" -quality 50

四、问题排查手册

异常现象解决方案预防建议
转换后乱码1. 检查系统字体库
2. 转换时勾选「嵌入字体」
优先使用Unicode编码文件
OCR识别错误1. 调整识别区域
2. 下载中文增强语言包
扫描分辨率≥300dpi
合并顺序错乱1. 按文件名数字排序
2. 手动拖动调整
文件名使用001_前缀

五、效率提升技巧

  1. 创建处理方案模板
    配置常用参数组合 → 保存为「我的工作流」快速调用

  2. 监控文件夹自动处理
    设置热监控目录 → 自动转换新存入文件

  3. 与办公软件集成
    在Word/Excel中安装PDF24插件 → 直接右键转换


六、安全与隐私建议

  • 🔒 敏感文件处理优先使用离线桌面版
  • ⏳ 在线工具文件保留策略:服务器自动1小时后删除
  • 🛡️ 推荐开启「处理完成后擦除缓存」设置

通过本教程,您已掌握从基础操作到企业级应用的完整PDF24工作流。如需获取更多模板或参与高级培训,可访问PDF24知识库或加入官方用户社区。

接下来在为大家介绍几个开源的小众的pdfgo工具,它们可以帮助您快速处理pdf文件。

以下是 GitHub 上广受好评的开源 PDF 工具推荐,覆盖文档处理、格式转换、安全加密等多种场景,数据综合自多个权威技术社区评测:


一、全能型 PDF 处理工具

1. Stirling-PDF
2. PDF.js
  • 核心功能:Mozilla 开源的 PDF 渲染引擎,支持浏览器内 高精度预览和基础编辑(文本选择、缩放、搜索)。
  • 技术亮点
    • 作为 Firefox 默认 PDF 查看器,兼容性极强;
    • 提供 JavaScript API,可二次开发实现水印添加、表单填写等功能。
  • 适用场景:网页嵌入式 PDF 阅读器、轻量级前端 PDF 处理。
  • GitHubGitHub - mozilla/pdf.js: PDF Reader in JavaScript (Star 48.8k)

二、开发集成工具

3. Apache PDFBox
  • 核心功能:Java 语言实现的 企业级 PDF 处理库,支持创建/修改文档、提取内容、数字签名等。
  • 技术亮点
    • 对 PDF/A 标准支持完善,适合长期存档需求;
    • 提供 OCR 扩展模块,可识别扫描件文字。
  • 适用场景:Java 项目集成、金融/医疗等行业的合规文档处理。
  • GitHubGitHub - apache/pdfbox: Mirror of Apache PDFBox (Star 2.7k)
4. OpenPDF
5. pdf-lib

三、特色工具补充

6. diff-pdf
7. QuestPDF

选择建议

  • 日常办公:Stirling-PDF(图形化操作) + PDF.js(快速预览)
  • 企业开发:Apache PDFBox(Java) / QuestPDF(.NET)
  • 前端集成:pdf-lib(浏览器端)
  • 文档审核:diff-pdf(差异对比)

接下来详细介绍下这几个工具的使用,有些工具需要一些编程基础,但大部分工具都可以直接使用,只需要简单配置即可。有什么疑问可以留言给我,或者给我发邮件 peterleeaifwj@gmail.com 。

1.Stirling-PDF

以下是为 Stirling-PDF 编写的详细教程,整合了最新功能与部署方法,涵盖本地化部署、核心功能及使用技巧:


一、Stirling-PDF 简介

Stirling-PDF 是一款开源的本地化 PDF 处理工具,支持 50+ 种 PDF 操作,包括合并/拆分、格式转换、OCR 识别、权限管理等。所有操作均在本地完成,无需上传文件至云端,保障数据隐私安全。其技术栈基于 Spring Boot 和 PDFBox,提供 Web 界面操作,支持 Docker 部署和 Windows 独立运行。


二、部署教程

1. Docker 部署(推荐)

适用场景:Linux/Windows/macOS 系统,需长期使用。

# 拉取镜像(国内用户建议使用华为云镜像加速)
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/stirlingtools/stirling-pdf:latest

# 启动容器
docker run -d \
  -p 8080:8080 \  # 端口映射(可自定义左侧主机端口)
  -v /本地路径/trainingData:/usr/share/tessdata \  # OCR语言包挂载
  -v /本地路径/configs:/configs \  # 配置文件
  -v /本地路径/logs:/logs \  # 日志文件
  -e LANGS=zh_CN \  # 设置中文界面(部分版本需在Web界面手动切换)
  -e DOCKER_ENABLE_SECURITY=false \  # 关闭安全限制
  --name stirling-pdf \
  frooodle/s-pdf:latest

注意

  • OCR 功能需额外下载 Tesseract 语言包(如 chi_sim.traineddata)至 trainingData 目录。
  • 若需开机自启,添加参数 --restart unless-stopped
2. Docker Compose 部署

创建 docker-compose.yml 文件:

version: '3.3'
services:
  stirling-pdf:
    image: frooodle/s-pdf:latest
    ports:
      - "8095:8080"  # 自定义端口
    volumes:
      - ./trainingData:/usr/share/tessdata
      - ./configs:/configs
    environment:
      - LANGS=zh_CN
      - DOCKER_ENABLE_SECURITY=false

执行命令:docker-compose up -d

3. Windows 独立运行

下载 Stirling-PDF.exe(约 80MB),需 Java 17+ 环境。启动后访问 http://localhost:8080,适合临时使用。


三、核心功能详解

1. 页面操作
  • 合并/拆分:支持批量上传 PDF,按页码或自动分割(如提取奇数页 2n-1)。
  • 旋转/裁剪:以 90° 增量调整页面方向,精确裁剪边缘空白。
  • 水印/密码:添加文字或图片水印,设置打开/编辑密码。
2. 格式转换
  • Office/HTML → PDF:利用内置 LibreOffice 转换 Word、PPT、Markdown 等文件。
  • PDF → 图片:输出 PNG/JPEG 格式,可设置分辨率。
3. 高级功能
  • OCR 识别:需挂载 Tesseract 语言包,支持中英文扫描件转可编辑文本。
  • 压缩优化:减小文件体积(平均缩减 30%),保持文字清晰度。
  • 元数据编辑:修改作者、标题等信息,清理敏感元数据。

四、使用技巧

  1. 中文界面配置:若环境变量 LANGS=zh_CN 无效,需在 Web 界面右上角手动切换。
  2. 批量处理:通过「管道脚本」功能预设操作流程,实现自动化处理。
  3. API 集成:调用 RESTful API 与企业系统对接,文档路径:http://IP:端口/api/docs

五、常见问题

  • OCR 失败:检查 trainingData 目录是否包含正确语言包。
  • 文件大小限制:默认支持 ≤100MB 文件,可通过修改 application.yml 调整。
  • 性能优化:对低配设备建议使用 latest-ultra-lite 镜像。

六、项目资源


通过本教程,您可快速搭建专属的 PDF 处理平台,兼顾安全性与功能性。如需扩展自定义配置(如邮件通知、第三方存储),可参考官方文档修改环境变量。


2.PDFjs

PDF.js 前端开发教程

PDF.js 是 Mozilla 开源的一款基于 JavaScript 的 PDF 渲染库,可在浏览器中直接解析和显示 PDF 文件,无需依赖插件。以下教程涵盖从基础到进阶的完整使用指南,结合最新功能与实践技巧。


一、环境准备与安装

1. 安装方式
  • CDN 引入(快速上手):
    在 HTML 文件中直接添加以下脚本:
    <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.14.123/pdf.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.14.123/pdf.worker.min.js"></script>
    
  • NPM 安装(推荐长期项目):
    npm install pdfjs-dist
    
    在代码中引入:
    import * as pdfjsLib from 'pdfjs-dist';
    
2. 配置 Worker 路径

PDF.js 使用 Web Worker 解析文件以提升性能,需指定 workerSrc

pdfjsLib.GlobalWorkerOptions.workerSrc = 
  'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.14.123/pdf.worker.min.js';

二、基础功能实现

1. 加载与渲染 PDF

步骤

  1. 创建容器:在 HTML 中添加 <canvas> 或 <div> 元素作为渲染区域。
  2. 加载文件:通过 URL 或二进制数据加载 PDF:
    const url = 'example.pdf';
    pdfjsLib.getDocument(url).promise.then(pdf => {
      // 获取第一页并渲染
      pdf.getPage(1).then(page => {
        const viewport = page.getViewport({ scale: 1.5 });
        const canvas = document.getElementById('pdf-canvas');
        const context = canvas.getContext('2d');
        canvas.width = viewport.width;
        canvas.height = viewport.height;
        page.render({ canvasContext: context, viewport });
      });
    });
    
2. 分页与导航
  • 翻页功能:通过按钮切换页码:
    let currentPage = 1;
    document.getElementById('nextPage').addEventListener('click', () => {
      if (currentPage < pdf.numPages) {
        currentPage++;
        renderPage(currentPage);
      }
    });
    
  • 缩略图列表:生成所有页面的缩略图预览。

三、进阶功能开发

1. 文本搜索与提取
  • 全文搜索:使用 page.getTextContent() 提取文本并匹配关键字:
    page.getTextContent().then(textContent => {
      const text = textContent.items.map(item => item.str).join(' ');
      if (text.includes('搜索词')) {
        // 高亮显示匹配内容
      }
    });
    
2. 自定义交互
  • 缩放与旋转:调整 scale 和 rotate 参数:
    const viewport = page.getViewport({ scale: 2, rotate: 90 });
    
  • 背景色与水印:通过 renderContext 设置背景色或叠加自定义图层。
3. 安全与权限控制
  • 禁止下载/打印:移除默认工具栏按钮,或通过 CSS 隐藏相关控件。
  • 文件加密:支持加载需密码的 PDF。

四、集成与优化

1. 快速集成查看器

使用内置的 viewer.html 快速实现完整功能:

<iframe src="/path/to/pdfjs/web/viewer.html?file=example.pdf"></iframe>
2. 性能优化
  • 分页渲染:逐页加载大文件,避免一次性内存占用。
  • 缓存策略:对已解析的页面使用本地存储缓存。

五、常见问题解决

  1. 跨域问题:确保服务器配置 CORS 头,或通过代理加载文件。
  2. 字体缺失:嵌入字体文件或使用 PDFJS.cMapUrl 配置。
  3. 大文件卡顿:启用 disableAutoFetch 参数分块加载。

六、示例代码与资源

通过本教程,您可快速掌握 PDF.js 的核心功能与高级用法,构建高效、安全的 PDF 预览解决方案。如需更复杂功能(如批注、签名),可参考官方扩展库或社区插件。


3.Apache PDFBox

Apache PDFBox 完整使用教程

Apache PDFBox 是一款功能强大的开源 Java 库,支持 PDF 文档的创建、解析、编辑与内容提取。本教程基于最新版本(2.0.29)编写,涵盖从基础到进阶的完整操作,并结合实际代码示例与优化技巧。


一、环境准备与安装

1. 添加依赖
  • Maven 项目:在 pom.xml 中添加依赖:
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.29</version>
    </dependency>
    
    建议同时引入 fontbox 和 pdfbox-tools 以支持字体与高级功能:
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>fontbox</artifactId>
        <version>2.0.29</version>
    </dependency>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox-tools</artifactId>
        <version>2.0.29</version>
    </dependency>
    
2. 验证安装

加载并打印 PDF 页数以验证环境:

try (PDDocument document = PDDocument.load(new File("example.pdf"))) {
    System.out.println("总页数: " + document.getNumberOfPages());
} catch (IOException e) {
    e.printStackTrace();
}

二、基础操作

1. 创建 PDF 文档

生成一个包含文本的 PDF 文件:

try (PDDocument doc = new PDDocument()) {
    PDPage page = new PDPage(PDRectangle.A4);  // 创建 A4 页面
    doc.addPage(page);
    try (PDPageContentStream content = new PDPageContentStream(doc, page)) {
        content.beginText();
        content.setFont(PDType1Font.HELVETICA_BOLD, 12);
        content.newLineAtOffset(100, 700);      // 坐标原点在左下角
        content.showText("Hello PDFBox!");
        content.endText();
    }
    doc.save("new_document.pdf");
}
2. 读取 PDF 内容

提取所有文本并分页显示:

PDDocument doc = PDDocument.load(new File("input.pdf"));
PDFTextStripper stripper = new PDFTextStripper();
for (int i = 1; i <= doc.getNumberOfPages(); i++) {
    stripper.setStartPage(i);
    stripper.setEndPage(i);
    String pageText = stripper.getText(doc);
    System.out.println("第" + i + "页内容:" + pageText);
}
doc.close();
3. 提取元数据

获取文档标题、作者等信息:

PDDocumentInformation info = document.getDocumentInformation();
System.out.println("标题: " + info.getTitle());
System.out.println("作者: " + info.getAuthor());

三、进阶功能

1. 处理图片

提取 PDF 中所有图片并保存:

for (PDPage page : doc.getPages()) {
    PDResources resources = page.getResources();
    for (COSName name : resources.getXObjectNames()) {
        PDXObject xobj = resources.getXObject(name);
        if (xobj instanceof PDImageXObject) {
            BufferedImage image = ((PDImageXObject) xobj).getImage();
            ImageIO.write(image, "PNG", new File("image_" + System.currentTimeMillis() + ".png"));
        }
    }
}
2. 合并与拆分 PDF
  • 合并文档:将多个 PDF 合并为一个:
    PDDocument mergedDoc = new PDDocument();
    for (File file : files) {
        try (PDDocument srcDoc = PDDocument.load(file)) {
            for (PDPage page : srcDoc.getPages()) {
                mergedDoc.addPage(page);
            }
        }
    }
    mergedDoc.save("merged.pdf");
    
  • 拆分文档:按页分割 PDF:
    for (int i = 0; i < doc.getNumberOfPages(); i++) {
        PDDocument splitDoc = new PDDocument();
        splitDoc.addPage(doc.getPage(i));
        splitDoc.save("page_" + (i+1) + ".pdf");
    }
    
3. 加密与解密
  • 设置密码:限制打开权限:
    StandardProtectionPolicy policy = new StandardProtectionPolicy("owner_pass", "user_pass", AccessPermission.getDefault());
    doc.protect(policy);
    doc.save("encrypted.pdf");
    
  • 解密文件:需提供密码:
    LoadOptions options = new LoadOptions();
    options.setPassword("user_pass");
    PDDocument doc = PDDocument.load(new File("locked.pdf"), options);
    

四、高级应用与优化

1. 添加水印与页眉

在每页右上角添加文字水印:

for (PDPage page : doc.getPages()) {
    try (PDPageContentStream content = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.APPEND, true)) {
        content.setFont(PDType1Font.HELVETICA_OBLIQUE, 16);
        content.beginText();
        content.newLineAtOffset(page.getMediaBox().getWidth() - 150, 30);  // 右下角坐标
        content.showText("Confidential");
        content.endText();
    }
}
2. 性能优化
  • 大文件处理:逐页加载避免内存溢出:
    PDFParser parser = new PDFParser(new RandomAccessBufferedFileInputStream("large.pdf"));
    parser.parse();
    PDDocument doc = parser.getPDDocument();
    for (int i = 0; i < doc.getNumberOfPages(); i++) {
        PDPage page = doc.getPage(i);
        // 处理单页
    }
    
  • 缓存策略:使用 WeakReference 缓存常用资源。

五、常见问题

  1. 中文乱码:需嵌入中文字体(如 PDTrueTypeFont.load())。
  2. 内存泄漏:务必使用 try-with-resources 或手动关闭 PDDocument
  3. OCR 整合:结合 Tesseract 实现扫描件文本识别(需额外依赖)。

六、资源与扩展


通过本教程,您可快速掌握 PDFBox 的核心功能,实现从基础操作到企业级应用的开发。建议结合官方文档和实际项目需求进一步探索高级功能(如数字签名、表单处理)。


4.OpenPDF

OpenPDF 开发教程

OpenPDF 是一款基于 iText 分支的开源 Java PDF 库,支持生成、编辑、转换和加密 PDF 文档。本教程基于最新版本(1.3.35 及 2.0.3)编写,涵盖基础到进阶功能,结合代码示例与最佳实践。


一、环境配置

1. 添加依赖
  • Maven 项目
    在 pom.xml 中添加以下依赖(根据 JDK 版本选择):
    <dependency>
        <groupId>com.github.librepdf</groupId>
        <artifactId>openpdf</artifactId>
        <version>1.3.35</version> <!-- 支持 JDK 8 -->
        <!-- 或使用 2.0.3 版本(需 JDK 9+) -->
    </dependency>
    <dependency>
        <groupId>com.github.librepdf</groupId>
        <artifactId>openpdf-fonts-extra</artifactId>
        <version>1.3.35</version> <!-- 扩展字体支持 -->
    </dependency>
    
  • Gradle 项目
    implementation 'com.github.librepdf:openpdf:1.3.35'
    
2. 初始化 PDF 文档
import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;
import java.io.FileOutputStream;

public class BasicDemo {
    public static void main(String[] args) {
        Document document = new Document();
        try {
            PdfWriter.getInstance(document, new FileOutputStream("hello.pdf"));
            document.open();
            document.add(new Paragraph("Hello OpenPDF!"));
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

二、基础功能

1. 支持中文

需显式指定中文字体避免乱码:

BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(bfChinese, 12, Font.NORMAL);
document.add(new Paragraph("中文内容", font));
2. 添加图片

从资源文件加载并缩放图片:

InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("logo.png");
byte[] byteArray = IOUtils.toByteArray(is);
Image image = Image.getInstance(byteArray);
image.scaleAbsolute(100, 50); // 设置绝对尺寸
document.add(image);
3. 创建表格
  • 轻量级表格(推荐大数据场景) :
    float[] widths = {10f, 20f, 30f};
    Table table = new Table(widths.length);
    table.setWidths(widths);
    table.addCell(new Cell(new Phrase("标题", font)).setHorizontalAlignment(Element.ALIGN_CENTER));
    // 填充数据行...
    document.add(table);
    

三、进阶功能

1. PDF 加密与签名
  • 设置密码保护 :
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("secure.pdf"));
    writer.setEncryption("user_pass".getBytes(), "owner_pass".getBytes(), 
        PdfWriter.ALLOW_PRINTING, PdfWriter.STANDARD_ENCRYPTION_128);
    
  • 数字签名:需集成 CryptoApplet 等安全组件。
2. HTML 转 PDF

结合模板引擎(如 FreeMarker)生成动态内容:

// 渲染 HTML 模板
Template template = cfg.getTemplate("invoice.html");
StringWriter htmlContent = new StringWriter();
template.process(data, htmlContent);

// 转换为 PDF
HtmlConverter.convertToPdf(htmlContent.toString(), new FileOutputStream("output.pdf"));
3. PDF 操作
  • 合并 PDF :
    PdfReader reader1 = new PdfReader("file1.pdf");
    PdfReader reader2 = new PdfReader("file2.pdf");
    Document mergedDoc = new Document();
    PdfCopy copy = new PdfCopy(mergedDoc, new FileOutputStream("merged.pdf"));
    mergedDoc.open();
    copy.addDocument(reader1);
    copy.addDocument(reader2);
    mergedDoc.close();
    

四、性能优化

1. 大文件处理

逐页处理避免内存溢出:

PdfReader reader = new PdfReader("large.pdf");
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
    PdfImportedPage page = writer.getImportedPage(reader, i);
    writer.getDirectContent().addTemplate(page, 0, 0);
}
2. 资源管理

使用 try-with-resources 确保关闭流:

try (Document doc = new Document();
     FileOutputStream fos = new FileOutputStream("auto_close.pdf")) {
    PdfWriter.getInstance(doc, fos);
    // 操作文档...
}

五、常见问题

  1. 中文乱码:确保使用 STSong-Light 字体并正确挂载字体包。
  2. 依赖冲突:检查是否与其他 PDF 库(如 iText)冲突。
  3. 性能瓶颈:优先使用 Table 类而非 PdfPTable 处理大数据。

六、资源与扩展

通过本教程,您可快速掌握 OpenPDF 的核心功能,实现从简单文档生成到复杂企业级应用的开发。建议结合官方文档和社区资源进一步探索高级特性(如条形码生成、表单处理)。

以下是针对 JavaScript 库 pdf-lib 的完整教程,涵盖基础操作到高级功能,结合最新版本(截至 2025 年)的最佳实践:


5.pdf-lib

一、pdf-lib 简介

pdf-lib 是一款纯 JavaScript 实现的 PDF 处理库,支持在浏览器和 Node.js 环境中动态创建、编辑 PDF 文档。其核心优势包括:

  • 零依赖:无需安装外部工具或插件。
  • 跨平台:兼容 Web、移动端及服务端。
  • 功能全面:支持文本、图像、表单、加密、页面操作等。
  • 开源免费:MIT 协议,社区活跃。

二、环境配置

1. 安装

通过 npm 安装:

npm install pdf-lib

或通过 CDN 引入:

<script src="https://unpkg.com/pdf-lib@latest/dist/pdf-lib.min.js"></script>
2. 初始化文档
import { PDFDocument, rgb } from 'pdf-lib';

async function createPDF() {
    // 创建空 PDF
    const pdfDoc = await PDFDocument.create();
    // 添加页面(默认 A4 尺寸)
    const page = pdfDoc.addPage([595, 842]); // 单位:点(1 inch = 72 points)
    return pdfDoc;
}

三、基础功能

1. 添加文本
async function addText(pdfDoc) {
    const page = pdfDoc.getPages()[0];
    page.drawText('Hello pdf-lib!', {
        x: 50,
        y: 750, // 原点在左下角
        size: 24,
        color: rgb(0, 0, 0), // RGB 颜色
        font: await pdfDoc.embedFont('Helvetica')
    });
    return pdfDoc;
}

关键点

  • 使用 embedFont() 加载字体(支持标准 14 种字体或自定义字体)。
  • 坐标系统以页面左下角为原点。
2. 插入图片
async function addImage(pdfDoc, imageUrl) {
    const imageBytes = await fetch(imageUrl).then(res => res.arrayBuffer());
    const image = await pdfDoc.embedJpg(imageBytes); // 支持 PNG/JPG
    const page = pdfDoc.getPages()[0];
    page.drawImage(image, {
        x: 100,
        y: 500,
        width: 200,
        height: 150,
        opacity: 0.8 // 透明度
    });
    return pdfDoc;
}

注意:跨域图片需服务器配置 CORS 或使用代理。


四、进阶功能

1. 合并 PDF
async function mergePDFs(urls) {
    const mergedPdf = await PDFDocument.create();
    for (const url of urls) {
        const pdfBytes = await fetch(url).then(res => res.arrayBuffer());
        const pdf = await PDFDocument.load(pdfBytes);
        const copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());
        copiedPages.forEach(page => mergedPdf.addPage(page));
    }
    return mergedPdf;
}

技巧:使用 copyPages() 保留原始格式(如矢量图形)。

2. 填充 PDF 表单
async function fillForm(pdfBytes, formData) {
    const pdfDoc = await PDFDocument.load(pdfBytes);
    const form = pdfDoc.getForm();
    // 获取表单字段并填充
    const nameField = form.getTextField('name');
    nameField.setText(formData.name);
    // 处理复选框/单选按钮
    const agreeCheckbox = form.getCheckBox('agree');
    agreeCheckbox.check();
    return pdfDoc;
}

适用场景:动态生成合同、申请表等交互式文档。

3. 加密与权限控制
async function encryptPDF(pdfDoc, password) {
    pdfDoc.encrypt({
        userPassword: password, // 用户密码(打开需要)
        ownerPassword: 'master', // 所有者密码(修改权限)
        permissions: {
            printing: 'lowResolution', // 允许打印(低分辨率)
            modifying: false, // 禁止修改
            copying: false // 禁止复制文本
        }
    });
    return pdfDoc;
}

安全等级:支持 128 位 AES 加密。


五、高级技巧

1. 页面操作
  • 旋转页面
    page.setRotation(90); // 90度旋转
    
  • 调整尺寸
    page.setSize(300, 400); // 自定义宽高(单位:点)
    
2. 矢量图形绘制
page.drawSvgPath('M 100 100 L 200 200 Q 250 150 300 100', {
    borderColor: rgb(1, 0, 0),
    borderWidth: 2
});

支持:路径、贝塞尔曲线等 SVG 指令。


六、常见问题

  1. 中文乱码

    • 使用中文字体文件(如 await pdfDoc.embedFont(await fetch('simsun.ttf')))。
    • 确保字体包含中文字符集。
  2. 性能优化

    • 分块处理大文件,避免内存溢出。
    • 使用 Web Worker 避免浏览器主线程阻塞。
  3. 保存与下载

    const pdfBytes = await pdfDoc.save();
    const blob = new Blob([pdfBytes], { type: 'application/pdf' });
    const link = document.createElement('a');
    link.href = URL.createObjectURL(blob);
    link.download = 'output.pdf';
    link.click();
    

七、资源推荐

  • 官方文档pdf-lib GitHub
  • 示例仓库:包含表单填充、水印添加等完整案例。

通过本教程,您可快速掌握 pdf-lib 的核心功能,实现从简单文档生成到复杂交互式 PDF 的开发需求。如需深度定制(如 PDF/A 标准支持),可参考官方扩展库或社区插件。

6.diff-pdf

以下是为 diff-pdf 工具编写的详细教程,整合了安装、基础与进阶用法、常见问题及解决方案,结合最新版本(截至 2025 年)的最佳实践:


一、diff-pdf 简介

diff-pdf 是一款基于 C++ 开发的跨平台 PDF 对比工具,支持通过命令行或 GUI 界面直观比较两个 PDF 文件的文本和布局差异。其核心功能包括:

  • 差异高亮:生成新 PDF 或 GUI 界面中标注差异区域。
  • 灵活模式:支持文本对比、布局对比及混合模式。
  • 轻量化:无需复杂依赖,适合开发者和普通用户。

二、环境安装

1. Windows
  • 方法一(推荐):通过包管理器 choco 安装:
    choco install diff-pdf
    
  • 方法二:下载预编译包(官网下载),解压后直接运行 diff-pdf.exe
2. macOS
  • 使用 brew 安装:
    brew install diff-pdf
    
3. Linux
  • Debian/Ubuntu
    sudo apt-get install diff-pdf
    
  • Fedora/CentOS
    sudo dnf install diff-pdf
    
4. 验证安装
diff-pdf --version  # 输出版本信息即安装成功

三、基础使用

1. 命令行模式
  • 简单对比:仅返回差异状态码(0 表示无差异,1 表示有差异):
    diff-pdf file1.pdf file2.pdf
    
  • 生成差异 PDF
    diff-pdf --output-diff=diff.pdf file1.pdf file2.pdf  # 差异高亮保存至 diff.pdf
    
  • GUI 界面查看
    diff-pdf --view file1.pdf file2.pdf  # 分屏显示差异,支持翻页和缩放
    
2. 常用参数
参数说明
--mark-differences在 GUI 界面左侧标记差异区域
--tolerance=N设置像素差异容忍度(默认 0,严格对比)
--dpi=300调整渲染分辨率,提升对比精度

四、进阶功能

1. 对比模式选择
  • 文本对比:仅比较文本内容(忽略布局):
    diff-pdf --text-mode file1.pdf file2.pdf
    
  • 布局对比:仅比较页面元素位置(忽略文本内容):
    diff-pdf --layout-mode file1.pdf file2.pdf
    
2. 批量对比脚本

结合 Shell 脚本自动化批量对比:

for file in dir1/*.pdf; do
  diff-pdf "$file" "dir2/$(basename "$file")" --output-diff="diff/$(basename "$file")"
done
3. 集成到开发环境
  • Python 调用
    import subprocess
    result = subprocess.run(["diff-pdf", "--output-diff=diff.pdf", "a.pdf", "b.pdf"], capture_output=True)
    if result.returncode == 1:
        print("存在差异")
    

五、常见问题

1. 中文乱码
  • 问题:对比含中文字符的 PDF 时,差异区域显示乱码。
  • 解决
    1. 确保 PDF 文件已嵌入中文字体(如思宋体)。
    2. 安装系统级中文字库(如 poppler-data):
      sudo apt-get install poppler-data  # Debian/Ubuntu
      
2. 性能优化
  • 问题:大文件对比速度慢或内存占用高。
  • 解决
    • 增加 --dpi=150 降低渲染精度。
    • 使用 --threads=4 启用多线程处理(需编译时开启多线程支持)。
3. 依赖缺失
  • 问题:运行时报错 poppler library not found
  • 解决:安装 poppler-utils
    sudo apt-get install poppler-utils  # Debian/Ubuntu
    

六、扩展资源

  • 官方文档GitHub 仓库
  • 社区案例:参考 CSDN 教程 中的原理图对比实例。
  • 替代工具:若需文本层差异分析,可尝试 pdf-diff(Python 实现)。

通过本教程,您可快速掌握 diff-pdf 的核心功能,适用于文档校对、版本控制等场景。如需深度定制(如集成到 CI/CD 流程),可参考官方 API 文档或社区开发者指南。


7.QuestPDF

QuestPDF 全功能教程

QuestPDF 是一款基于 .NET 平台的高性能 PDF 生成库,凭借其声明式 API 和自主布局引擎,支持快速创建复杂且专业的 PDF 文档。本教程基于最新版本(2025 年)编写,覆盖从基础到企业级应用的完整开发流程。


一、环境配置

1. 安装与初始化
  • NuGet 安装
    通过命令行或 Visual Studio 的包管理器安装核心库:
    dotnet add package QuestPDF
    
  • 许可证设置(社区版免费):
    在代码入口处声明许可证类型:
    using QuestPDF.Infrastructure;
    QuestPDF.Settings.License = LicenseType.Community; // 适用于年收入 < 100 万美元的项目
    

二、基础功能

1. 创建第一个 PDF
Document.Create(container => {
    container.Page(page => {
        page.Margin(50); // 设置页边距
        page.Content().Column(column => {
            column.Item().Text("Hello QuestPDF!").FontSize(24).Bold(); // 标题文本
            column.Item().Image("logo.png"); // 插入图片
        });
    });
}).GeneratePdf("output.pdf"); // 生成文件

关键点

  • 使用 Column 布局管理器垂直排列元素。
  • 原点位于页面左下角,坐标单位为点(1 inch = 72 points)。
2. 样式与布局
  • 字体与颜色
    column.Item().Text("蓝色居中文本")
        .FontColor(Colors.Blue.Medium)
        .AlignCenter()
        .FontFamily("Arial"); // 支持自定义字体
    
  • 行与列混合布局
    page.Content().Row(row => {
        row.RelativeItem().Column(column => { /* 左侧内容 */ });
        row.RelativeItem().Column(column => { /* 右侧内容 */ });
    }); // 类似网页 Flex 布局
    

三、进阶功能

1. 动态表格与数据绑定

根据数据集合生成动态表格:

var orderItems = new List<OrderItem> { /* 数据源 */ };
container.Table(table => {
    table.ColumnsDefinition(columns => {
        columns.RelativeColumn(); // 自适应宽度
        columns.ConstantColumn(100); // 固定宽度
    });
    table.Header(header => {
        header.Cell().Text("产品名称");
        header.Cell().Text("价格");
    });
    foreach (var item in orderItems) {
        table.Cell().Text(item.Name);
        table.Cell().Text($"${item.Price:F2}");
    }
});
2. 高级元素与交互
  • 条形码与二维码
    container.Barcode("123456789")
        .BarcodeType(BarcodeType.Code128)
        .Height(50); // 支持多种编码格式
    
  • 分页与页眉页脚
    page.Header().Text("销售报告").FontSize(20);
    page.Footer().AlignCenter().Text(x => {
        x.Span("第 ");
        x.CurrentPageNumber();
        x.Span(" 页");
    }); // 自动分页计数
    

四、企业级应用

1. 发票生成系统

结合数据模型动态生成发票:

public class InvoiceDocument : IDocument {
    private InvoiceModel Model { get; }
    public InvoiceDocument(InvoiceModel model) => Model = model;

    public void Compose(IDocumentContainer container) {
        container.Page(page => {
            page.Size(PageSizes.A4);
            page.Content().Column(column => {
                // 填充发票头、客户信息、商品列表、总计等
            });
        });
    }
}
// 调用生成
var invoice = new InvoiceDocument(GetInvoiceData());
invoice.GeneratePdf("invoice.pdf");
2. 性能优化
  • 大文件处理:逐页加载避免内存溢出。
  • 多线程渲染:通过 Parallel.ForEach 分块处理复杂文档。

五、常见问题

  1. 中文乱码

    • 嵌入中文字体文件(如 FontManager.RegisterFont())。
    • 确保服务器安装 poppler-data 等依赖库。
  2. 性能瓶颈

    • 使用 DisableCache() 关闭非必要缓存。
    • 调整 Settings.DocumentLayoutExceptionThreshold 控制异常处理开销。
  3. 许可证限制

    • 社区版禁止修改库源代码,企业版需联系官方购买。

六、资源与扩展

  • 官方文档QuestPDF GitHub
  • 示例仓库:包含发票、报告、合同等完整案例。
  • 社区支持:Stack Overflow 的 #questpdf 标签解答技术问题。

通过本教程,您可快速掌握 QuestPDF 的核心功能,实现从简单文档到复杂企业级 PDF 的生成需求。建议结合官方示例和社区资源深入探索高级特性(如数字签名、PDF/A 标准支持)。

最后再给大家介绍一下pdf文档翻译的工具,这个在我上一篇文章翻译工具中也介绍过,这里因为跟pdf相关,也在介绍一下,让大家看一篇文章经就可以掌握所有pdf的处理

以下是PDFMathTranslate的详细使用教程,涵盖多种安装方式及核心功能操作:

一、安装方式

  1. Python环境安装(推荐开发者)

    • 要求Python 3.10-3.12版本
    • 执行命令安装:
      pip install pdf2zh
      
    • 可选工具链安装(加速依赖管理):
      pip install uv
      uv tool install --python 3.12 pdf2zh
      
  2. Windows便携版(新手友好)

    • 从GitHub Releases页面下载pdf2zh-version-win64.zip
    • 解压后直接运行pdf2zh.exe,无需配置环境。
  3. Docker容器部署

    • 拉取镜像并启动:
      docker pull byaidu/pdf2zh
      docker run -d -p 7860:7860 byaidu/pdf2zh
      
    • 访问http://localhost:7860使用Web界面

二、基础使用

命令行模式
  • 单文件翻译

    pdf2zh document.pdf
    

    生成example-mono.pdf(纯译文)和example-dual.pdf(双语对照)

  • 高级参数

    • 指定语言:-li en -lo zh(英译中)
    • 选择翻译引擎:-s deepl(支持Google/DeepL/Ollama等)
    • 翻译指定页:-p 1-3,5(1-3页和第5页)
图形界面(GUI)
  • 启动界面:
    pdf2zh -i
    
    浏览器访问http://localhost:7860
  • 操作流程:
    1. 上传PDF文件(在线版限制<5MB)
    2. 选择翻译服务(如DeepL、GPT-4等)
    3. 设置语言对和页码范围
    4. 下载生成的双语/单语文件

三、高级功能

  1. API密钥配置

    • DeepSeek示例:
      set DEEPSEEK_API_KEY=XXXX
      pdf2zh ZZZ.pdf -s deepseek:deepseek-chat
      
      需先在DeepSeek平台创建API
  2. 批量翻译

    pdf2zh --dir /path/to/translate/
    

    支持文件夹内所有PDF自动处理

  3. 缓存管理

    • 强制刷新翻译:--ignore-cache
    • 自定义配置文件:--config config.json(可预设语言/引擎等参数)

四、注意事项

  1. 路径问题
    文件路径错误时使用cd命令切换目录

  2. 模型兼容性

    • Ollama本地模型需配置OLLAMA_HOST和模型名称
    • OpenAI类服务需设置OPENAI_BASE_URL和API密钥
  3. 输出格式
    支持导出PDF/Word格式,保留原文档的公式、图表、目录结构

五、扩展应用

  • Zotero集成
    安装专用插件后可直接在文献管理器中翻译
  • 学术场景优化
    使用-t 4开启多线程加速处理长篇论文

通过上述方式,用户可根据需求灵活选择本地部署或在线服务。对于企业级应用,建议通过Docker实现服务化部署,并结合内网穿透工具(如cpolar)实现远程访问。

提示:不同翻译引擎效果存在差异,学术文献推荐DeepL/Google,专业术语处理可尝试GPT-4等大模型。更多技术细节可参考官方文档

好了到这里,这篇文章我们就介绍完了,希望大家能有所收获!整理不易,欢迎大家订阅。博主会持续更新工具合集文章,敬请期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子n1

感谢每位朋友的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值