这篇文章的主题是pdf处理相关的工具,我最喜欢的pdf处理工具是PDF24,它集成了多种功能,功能强大且易于使用。
PDF24 全功能实战教程
一、软件定位与核心优势
PDF24 是一款集「桌面端+在线工具」于一体的全能PDF处理工具,支持 50+ 种文档操作功能,特别在以下场景表现突出:
- ✅ 多格式互转(PDF←→Word/Excel/PPT/图片等)
- ✅ 批量文件处理(合并/拆分/压缩100+文件)
- ✅ 智能OCR识别(扫描件转可编辑文本)
- ✅ 敏感信息保护(密码加密/水印/红章)
二、双版本使用指南
方案1:在线工具(免安装)
- 访问 PDF24在线工具站
- 选择需要的功能(如「PDF合并」)
- 拖拽上传文件 → 调整参数 → 处理下载
方案2:桌面客户端(推荐专业用户)
- 下载安装
官网下载 → 运行安装包 → 选择中文语言 - 功能分类:转换工具、编辑工具、安全工具、OCR工具
三、核心功能分步详解
1. 文档合并与拆分
场景:将多个PDF合并为报告/拆解合同附件
操作类型 | 具体步骤 |
---|---|
合并文件 | ① 打开工具 → 选择「合并PDF」 ② 拖拽添加文件 → 拖动调整顺序 ③ 点击「保存」生成新文档 |
拆分文件 | ① 选择「拆分PDF」→ 上传文件 ② 设置规则:按页数/按书签/自定义范围 ③ 勾选「为每个分割创建独立文件」 |
💡 技巧:在「选项」中启用「智能识别目录拆分」,自动按标题层级分割文档
2. 格式转换实战
支持格式:
- 转PDF:Word/Excel/PPT/图片/JPG/HTML
- PDF转出:Word(.docx)/Excel(.xlsx)/PPT(.pptx)/图片(.png)
操作演示(PDF转Word):
- 选择「PDF转Word」工具
- 上传文件 → 设置参数:
{ "保留版式": True, "图片压缩质量": 80%, "启用OCR识别": False # 扫描件需开启 }
- 下载可编辑的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_前缀 |
五、效率提升技巧
-
创建处理方案模板
配置常用参数组合 → 保存为「我的工作流」快速调用 -
监控文件夹自动处理
设置热监控目录 → 自动转换新存入文件 -
与办公软件集成
在Word/Excel中安装PDF24插件 → 直接右键转换
六、安全与隐私建议
- 🔒 敏感文件处理优先使用离线桌面版
- ⏳ 在线工具文件保留策略:服务器自动1小时后删除
- 🛡️ 推荐开启「处理完成后擦除缓存」设置
通过本教程,您已掌握从基础操作到企业级应用的完整PDF24工作流。如需获取更多模板或参与高级培训,可访问PDF24知识库或加入官方用户社区。
接下来在为大家介绍几个开源的小众的pdfgo工具,它们可以帮助您快速处理pdf文件。
以下是 GitHub 上广受好评的开源 PDF 工具推荐,覆盖文档处理、格式转换、安全加密等多种场景,数据综合自多个权威技术社区评测:
一、全能型 PDF 处理工具
1. Stirling-PDF
- 核心功能:支持 60+ 种 PDF 操作,包括合并/拆分、格式转换(Word/PPT/图片)、OCR 文字识别、压缩加密等,提供 Web 图形化界面。
- 技术亮点:
- 基于 Docker 本地部署,数据不经过云端,保障隐私安全;
- 集成 LibreOffice 实现复杂格式转换,支持自动化流水线处理;
- 提供 API 接口,可与企业内部系统集成。
- 适用场景:企业级文档管理、批量处理扫描件、跨平台办公。
- GitHub:GitHub - Stirling-Tools/Stirling-PDF: #1 Locally hosted web application that allows you to perform various operations on PDF files (Star 49k)
2. PDF.js
- 核心功能:Mozilla 开源的 PDF 渲染引擎,支持浏览器内 高精度预览和基础编辑(文本选择、缩放、搜索)。
- 技术亮点:
- 作为 Firefox 默认 PDF 查看器,兼容性极强;
- 提供 JavaScript API,可二次开发实现水印添加、表单填写等功能。
- 适用场景:网页嵌入式 PDF 阅读器、轻量级前端 PDF 处理。
- GitHub:GitHub - mozilla/pdf.js: PDF Reader in JavaScript (Star 48.8k)
二、开发集成工具
3. Apache PDFBox
- 核心功能:Java 语言实现的 企业级 PDF 处理库,支持创建/修改文档、提取内容、数字签名等。
- 技术亮点:
- 对 PDF/A 标准支持完善,适合长期存档需求;
- 提供 OCR 扩展模块,可识别扫描件文字。
- 适用场景:Java 项目集成、金融/医疗等行业的合规文档处理。
- GitHub:GitHub - apache/pdfbox: Mirror of Apache PDFBox (Star 2.7k)
4. OpenPDF
- 核心功能:iText 2 的开源替代方案,专注于 PDF 生成与修改,支持表单处理、权限控制。
- 技术亮点:
- 修复 iText 2 的安全漏洞,代码结构更清晰;
- 与旧版 iText 高度兼容,迁移成本低。
- 适用场景:Java 项目中的动态 PDF 报告生成、历史系统升级。
- GitHub:GitHub - LibrePDF/OpenPDF: OpenPDF is a free Java library for creating and editing PDF files, with a LGPL and MPL open source license. OpenPDF is based on a fork of iText. We welcome contributions from other developers. Please feel free to submit pull-requests and bugreports to this GitHub repository. (Star 3.6k)
5. pdf-lib
- 核心功能:纯 JavaScript 实现的轻量级 前端 PDF 操作库,支持创建/合并/裁剪 PDF。
- 技术亮点:
- 零依赖,可在浏览器和 Node.js 中运行;
- TypeScript 类型支持完善,开发体验流畅。
- 适用场景:Web 应用内 PDF 动态生成、电子合同签署。
- GitHub:GitHub - Hopding/pdf-lib: Create and modify PDF documents in any JavaScript environment (Star 7.1k)
三、特色工具补充
6. diff-pdf
- 核心功能:C++ 实现的 PDF 差异对比工具,高亮显示文本/布局差异。
- 技术亮点:
- 支持命令行和 GUI 模式;
- 输出差异报告,适合版本控制和文档审核。
- GitHub:GitHub - vslavik/diff-pdf: A simple tool for visually comparing two PDF files (Star 3.8k)
7. QuestPDF
- 核心功能:.NET 平台的现代化 PDF 生成库,提供 Fluent API 设计。
- 技术亮点:
- 支持复杂布局(表格、分页、浮动元素);
- 性能优异,可生成百页级文档。
- GitHub:GitHub - QuestPDF/QuestPDF: Generate and edit PDF documents in your .NET applications using the open-source QuestPDF library and its C# Fluent API. Build invoices, reports and data exports with ease. (Star 12.4k)
选择建议
- 日常办公: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%),保持文字清晰度。
- 元数据编辑:修改作者、标题等信息,清理敏感元数据。
四、使用技巧
- 中文界面配置:若环境变量
LANGS=zh_CN
无效,需在 Web 界面右上角手动切换。 - 批量处理:通过「管道脚本」功能预设操作流程,实现自动化处理。
- API 集成:调用 RESTful API 与企业系统对接,文档路径:
http://IP:端口/api/docs
。
五、常见问题
- OCR 失败:检查
trainingData
目录是否包含正确语言包。 - 文件大小限制:默认支持 ≤100MB 文件,可通过修改
application.yml
调整。 - 性能优化:对低配设备建议使用
latest-ultra-lite
镜像。
六、项目资源
- GitHub 仓库:GitHub - Stirling-Tools/Stirling-PDF: #1 Locally hosted web application that allows you to perform various operations on PDF files
- 国内镜像:XPlaza 信创开源广场 - 中国人自己的信创开源代码仓库,开发者社区
通过本教程,您可快速搭建专属的 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
步骤:
- 创建容器:在 HTML 中添加
<canvas>
或<div>
元素作为渲染区域。 - 加载文件:通过 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. 性能优化
- 分页渲染:逐页加载大文件,避免一次性内存占用。
- 缓存策略:对已解析的页面使用本地存储缓存。
五、常见问题解决
- 跨域问题:确保服务器配置 CORS 头,或通过代理加载文件。
- 字体缺失:嵌入字体文件或使用
PDFJS.cMapUrl
配置。 - 大文件卡顿:启用
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
缓存常用资源。
五、常见问题
- 中文乱码:需嵌入中文字体(如
PDTrueTypeFont.load()
)。 - 内存泄漏:务必使用
try-with-resources
或手动关闭PDDocument
。 - OCR 整合:结合 Tesseract 实现扫描件文本识别(需额外依赖)。
六、资源与扩展
- 官方文档:https://pdfbox.apache.org
- GitHub 示例:GitHub - apache/pdfbox: Mirror of Apache PDFBox
- 社区支持:Stack Overflow 搜索
#pdfbox
标签。
通过本教程,您可快速掌握 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);
// 操作文档...
}
五、常见问题
- 中文乱码:确保使用
STSong-Light
字体并正确挂载字体包。 - 依赖冲突:检查是否与其他 PDF 库(如 iText)冲突。
- 性能瓶颈:优先使用
Table
类而非PdfPTable
处理大数据。
六、资源与扩展
- 官方文档:GitHub - LibrePDF/OpenPDF: OpenPDF is a free Java library for creating and editing PDF files, with a LGPL and MPL open source license. OpenPDF is based on a fork of iText. We welcome contributions from other developers. Please feel free to submit pull-requests and bugreports to this GitHub repository.
- 社区示例:参考 CSDN 博客中的高级技巧。
- 版本更新:关注 2.0.3 版本的新特性(如多语言支持优化)。
通过本教程,您可快速掌握 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 指令。
六、常见问题
-
中文乱码:
- 使用中文字体文件(如
await pdfDoc.embedFont(await fetch('simsun.ttf'))
)。 - 确保字体包含中文字符集。
- 使用中文字体文件(如
-
性能优化:
- 分块处理大文件,避免内存溢出。
- 使用 Web Worker 避免浏览器主线程阻塞。
-
保存与下载:
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 时,差异区域显示乱码。
- 解决:
- 确保 PDF 文件已嵌入中文字体(如思宋体)。
- 安装系统级中文字库(如
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
六、扩展资源
通过本教程,您可快速掌握 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
分块处理复杂文档。
五、常见问题
-
中文乱码:
- 嵌入中文字体文件(如
FontManager.RegisterFont()
)。 - 确保服务器安装
poppler-data
等依赖库。
- 嵌入中文字体文件(如
-
性能瓶颈:
- 使用
DisableCache()
关闭非必要缓存。 - 调整
Settings.DocumentLayoutExceptionThreshold
控制异常处理开销。
- 使用
-
许可证限制:
- 社区版禁止修改库源代码,企业版需联系官方购买。
六、资源与扩展
- 官方文档:QuestPDF GitHub
- 示例仓库:包含发票、报告、合同等完整案例。
- 社区支持:Stack Overflow 的
#questpdf
标签解答技术问题。
通过本教程,您可快速掌握 QuestPDF 的核心功能,实现从简单文档到复杂企业级 PDF 的生成需求。建议结合官方示例和社区资源深入探索高级特性(如数字签名、PDF/A 标准支持)。
最后再给大家介绍一下pdf文档翻译的工具,这个在我上一篇文章翻译工具中也介绍过,这里因为跟pdf相关,也在介绍一下,让大家看一篇文章经就可以掌握所有pdf的处理
以下是PDFMathTranslate的详细使用教程,涵盖多种安装方式及核心功能操作:
一、安装方式
-
Python环境安装(推荐开发者)
- 要求Python 3.10-3.12版本
- 执行命令安装:
pip install pdf2zh
- 可选工具链安装(加速依赖管理):
pip install uv uv tool install --python 3.12 pdf2zh
-
Windows便携版(新手友好)
- 从GitHub Releases页面下载
pdf2zh-version-win64.zip
- 解压后直接运行
pdf2zh.exe
,无需配置环境。
- 从GitHub Releases页面下载
-
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
- 操作流程:
- 上传PDF文件(在线版限制<5MB)
- 选择翻译服务(如DeepL、GPT-4等)
- 设置语言对和页码范围
- 下载生成的双语/单语文件
三、高级功能
-
API密钥配置
- DeepSeek示例:
需先在DeepSeek平台创建APIset DEEPSEEK_API_KEY=XXXX pdf2zh ZZZ.pdf -s deepseek:deepseek-chat
- DeepSeek示例:
-
批量翻译
pdf2zh --dir /path/to/translate/
支持文件夹内所有PDF自动处理
-
缓存管理
- 强制刷新翻译:
--ignore-cache
- 自定义配置文件:
--config config.json
(可预设语言/引擎等参数)
- 强制刷新翻译:
四、注意事项
-
路径问题
文件路径错误时使用cd
命令切换目录 -
模型兼容性
- Ollama本地模型需配置
OLLAMA_HOST
和模型名称 - OpenAI类服务需设置
OPENAI_BASE_URL
和API密钥
- Ollama本地模型需配置
-
输出格式
支持导出PDF/Word格式,保留原文档的公式、图表、目录结构
五、扩展应用
- Zotero集成
安装专用插件后可直接在文献管理器中翻译 - 学术场景优化
使用-t 4
开启多线程加速处理长篇论文
通过上述方式,用户可根据需求灵活选择本地部署或在线服务。对于企业级应用,建议通过Docker实现服务化部署,并结合内网穿透工具(如cpolar)实现远程访问。
提示:不同翻译引擎效果存在差异,学术文献推荐DeepL/Google,专业术语处理可尝试GPT-4等大模型。更多技术细节可参考官方文档。