我正在学习 PDF“语法”,并尝试手动创建各种 PDF 文档(在 Windows 7 上,Notepad++ 编写第一个未引用的损坏文件,然后通过 pdftk 运行它们以生成具有更新引用的有效文件,如所述 here ...)。
我的学习资料:
- PDF Reference 6th edition, version 1.7
- + 各种在线资源。
我的问题:我想在文档中仅创建一次路径,然后可能在同一文档的其他部分多次重复使用它。例如。我可以定义一个 Logo 一次,然后在不同的页面中重复使用它,也许在同一页面的不同位置多次重复使用,也许使用不同的缩放系数......实现此目的的最佳方法是什么?
为了给出更好的想法,我可以这样定义一个 Logo (这里是十字):
3 0 obj
<< /Length 32>>
stream
10 0 10 30 re f
0 10 30 10 re S
endstream
endobj
并且希望在文档的其他位置重用相同的“形状”(可能具有不同的缩放比例),而无需再次指定路径。
我并不是在寻找一个软件来完成这项工作(例如 Acrobat...)。我想学习如何手动编写此文件(然后要求 pdftk
修复该文件)。
最佳答案
Kurt Pfeifle 的答案似乎仅适用于图像。对于路径对象,您必须使用子类型 Form
的 XObject
。这是一个工作示例:
%PDF-1.0
%¥±ë
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 297.6377952756 389.7637795276]
/Contents 4 0 R
/Resources << /XObject << /Mypath 5 0 R >> >>
>>
endobj
4 0 obj
<<
/Length 37
>>
stream
/Mypath Do
1 0 0 1 30 0 cm
/Mypath Do
endstream
endobj
5 0 obj
<<
/Type /XObject
/Subtype /Form
/BBox [20 0 50 50]
/Length 18
>>
stream
20 0 m 50 50 l h S
endstream
endobj
xref
0 6
0000000000 65535 n
0000000017 00000 n
0000000066 00000 n
0000000125 00000 n
0000000280 00000 n
0000000367 00000 n
trailer
<<
/Root 1 0 R
/Size 6
>>
startxref
484
%%EOF
Page
对象定义资源 Mypath
(对象 5)。该对象定义了一条从 (20, 0) 到 (50, 50) 的线。页面内容(对象 4)使用定义的路径及其当前坐标 (/Mypath Do
),然后将图形状态向右平移 30 个单位 (1 0 0 1 30 0 cm
),然后再次绘制路径(这次是从 (50, 0) 到 (80, 50))。
关于pdf-generation - 如何在PDF生成中重用路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29231953/