PDF 快速参考
资深程序员的 PDF 参考表 - 快速查找对象类型、操作符和文件结构
8 种基本对象类型
Boolean |
true / false |
Integer |
42, -17 |
Real |
3.14, -0.001 |
String |
(Text) / <48656C6C6F> |
Name |
/Type, /Length |
Array |
[1 2 3] |
Dictionary |
<</Key value>> |
Stream |
stream...endstream |
PDF 文件结构
Header
%PDF
Body
Objects
XRef
Table
Trailer
startxref
EOF
%%EOF
| 文件头 | %PDF-2.0 + 二进制标记 |
| 对象 | 1 0 obj ... endobj |
| XRef | 对象偏移量索引 |
| Trailer | /Root 引用 |
文档结构对象
/Catalog |
文档根对象 |
/Pages |
页面树节点 |
/Page |
单页对象 |
/Contents |
内容流 |
/Resources |
资源字典 |
/Font |
字体资源 |
/XObject |
图像/表单 |
内容流操作符
BT |
Begin Text(开始文本) |
ET |
End Text(结束文本) |
Tf |
设置字体 |
Td |
移动文本位置 |
Tj |
显示文本 |
TJ |
显示文本(带间距) |
Tm |
文本矩阵 |
q |
保存状态 |
Q |
恢复状态 |
页面框尺寸
/MediaBox |
页面物理尺寸 |
/CropBox |
可见区域 |
/BleedBox |
出血区域(印刷) |
/TrimBox |
裁切后尺寸 |
/ArtBox |
内容区域 |
默认单位:1/72 英寸(约 0.35mm)
A4 尺寸:[0 0 595 842]
流过滤器
/FlateDecode |
DEFLATE 压缩(最常用) |
/DCTDecode |
JPEG 图像 |
/JPXDecode |
JPEG2000 图像 |
/CCITTFaxDecode |
黑白图像(传真) |
/RunLengthDecode |
游程编码 |
/ASCIIHexDecode |
十六进制解码 |
最小 PDF 文件模板
%PDF-1.4
%âãÏÓ
1 0 obj
<</Type/Catalog/Pages 2 0 R>>
endobj
2 0 obj
<</Type/Pages/Kids[3 0 R]/Count 1>>
endobj
3 0 obj
<</Type/Page/Parent 2 0 R/MediaBox[0 0 612 792]/Contents 4 0 R/Resources<</Font<</F1 5 0 R>>>>>
endobj
4 0 obj
<</Length 44>>
stream
BT/F1 12 Tf 100 700 Td(Hello, World!)Tj ET
endstream
endobj
5 0 obj
<</Type/Font/Subtype/Type1/BaseFont/Helvetica>>
endobj
xref
0 6
0000000000 65535 f
0000000009 00000 n
0000000052 00000 n
0000000101 00000 n
0000000198 00000 n
0000000293 00000 n
trailer
<</Size 6/Root 1 0 R>>
startxref
370
%%EOF
Python 库速查
pypdf |
读取/合并/提取 |
reportlab |
创建 PDF |
PyMuPDF |
高性能处理 |
pdfplumber |
表格提取 |
pikepdf |
底层操作 |
JavaScript 库速查
pdf.js |
PDF 渲染(Mozilla) |
pdf-lib |
创建/修改 PDF |
pdfkit |
生成 PDF |
jspdf |
客户端生成 |
Golang 库速查
unipdf |
完整功能(商业) |
gofpdf |
简单生成 |
pdfcpu |
开源工具包 |
常用命令行工具
qpdf(无损操作)
# 查看结构
qpdf --show-structure file.pdf
# 线性化(Web 优化)
qpdf --linearize in.pdf out.pdf
# 解密
qpdf --decrypt in.pdf out.pdf
# 合并
qpdf --empty --pages a.pdf 1-z b.pdf 1-z -- out.pdf
pdftk(多功能)
# 拆分
pdftk in.pdf burst
# 合并
pdftk *.pdf cat output out.pdf
# 旋转
pdftk in.pdf cat 1-endright output out.pdf
# 提取页面
pdftk in.pdf cat 1-3 output out.pdf
pdfinfo(信息查看)
# 查看元数据
pdfinfo file.pdf
# 查看结构
pdfinfo -box file.pdf
# 提取文本
pdftotext file.pdf output.txt