[ PROMPT_NODE_26510 ]
PDF 参考
[ SKILL_DOCUMENTATION ]
# PDF 处理高级参考
本文档包含高级 PDF 处理功能、详细示例以及主技能说明中未涵盖的其他库。
## pypdfium2 库 (Apache/BSD 许可证)
### 概述
pypdfium2 是 PDFium(Chromium 的 PDF 库)的 Python 绑定。它非常适合快速 PDF 渲染、图像生成,并可作为 PyMuPDF 的替代品。
### 将 PDF 渲染为图像
python
import pypdfium2 as pdfium
from PIL import Image
# 加载 PDF
pdf = pdfium.PdfDocument("document.pdf")
# 将页面渲染为图像
page = pdf[0] # 第一页
bitmap = page.render(
scale=2.0, # 更高的分辨率
rotation=0 # 不旋转
)
# 转换为 PIL 图像
img = bitmap.to_pil()
img.save("page_1.png", "PNG")
# 处理多页
for i, page in enumerate(pdf):
bitmap = page.render(scale=1.5)
img = bitmap.to_pil()
img.save(f"page_{i+1}.jpg", "JPEG", quality=90)
### 使用 pypdfium2 提取文本
python
import pypdfium2 as pdfium
pdf = pdfium.PdfDocument("document.pdf")
for i, page in enumerate(pdf):
text = page.get_text()
print(f"Page {i+1} text length: {len(text)} chars")
## JavaScript 库
### pdf-lib (MIT 许可证)
pdf-lib 是一个功能强大的 JavaScript 库,用于在任何 JavaScript 环境中创建和修改 PDF 文档。
#### 加载并操作现有 PDF
javascript
import { PDFDocument } from 'pdf-lib';
import fs from 'fs';
async function manipulatePDF() {
// 加载现有 PDF
const existingPdfBytes = fs.readFileSync('input.pdf');
const pdfDoc = await PDFDocument.load(existingPdfBytes);
// 获取页数
const pageCount = pdfDoc.getPageCount();
console.log(`Document has ${pageCount} pages`);
// 添加新页面
const newPage = pdfDoc.addPage([600, 400]);
newPage.drawText('Added by pdf-lib', {
x: 100,
y: 300,
size: 16
});
// 保存修改后的 PDF
const pdfBytes = await pdfDoc.save();
fs.writeFileSync('modified.pdf', pdfBytes);
}
#### 从零开始创建复杂 PDF
javascript
import { PDFDocument, rgb, StandardFonts } from 'pdf-lib';
import fs from 'fs';
async function createPDF() {
const pdfDoc = await PDFDocument.create();
// 添加字体
const helveticaFont = await pdfDoc.embedFont(StandardFonts.Helvetica);
const helveticaBold = await pdfDoc.embedFont(StandardFonts.HelveticaBold);
// 添加页面
const page = pdfDoc.addPage([595, 842]); // A4 尺寸
const { wid