pdf-generation - 如何在PDF生成中重用路径?

标签 pdf-generation pdftk

我正在学习 PDF“语法”,并尝试手动创建各种 PDF 文档(在 Windows 7 上,Notepad++ 编写第一个未引用的损坏文件,然后通过 pdftk 运行它们以生成具有更新引用的有效文件,如所述 here ...)。

我的学习资料:

我的问题:我想在文档中仅创建一次路径,然后可能在同一文档的其他部分多次重复使用它。例如。我可以定义一个 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 的答案似乎仅适用于图像。对于路径对象,您必须使用子类型 FormXObject。这是一个工作示例:

%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/

相关文章:

ruby-on-rails - 在heroku上实现邪恶的pdf问题

java - 使用 itext 创建 PDF,使用按钮嵌入动画

pdf - PDFTK旋转页面问题

php - 带有 PDFtk(PHP laravel 后端)的 Azure Web 应用程序

java - 将 HTML 转换为 PDF 并将其添加到段落中

javascript - jsPDF:使用自定义字体对齐文本

python - ReportLab - 无法屏蔽图像 [Google App Engine]

pdf-generation - 将两个 a5 页面合并为一个 a4 页面(不使用 pdfnup)

php - 使用 PHP 从 html 表单转为 PDF

php - php exec() 运行时遇到问题