【发布时间】:2014-02-05 18:22:54
【问题描述】:
我正在尝试为 blender 开发一个 python 脚本,以将渲染的图像序列输出到 PDF。我正在使用 Imagemagick 转换为 PDF,该部分工作正常,但是,我希望缩略图预览也包含在 PDF 中。
PDF 格式让我有点困惑,但我找到了/PageMode 和/UseThumbs 标签以及如何将它们正确插入到文件中。我可以手动执行此操作,并且效果很好。但是我一直试图在不需要手动完成的情况下获得类似的结果,毕竟我正在编写一个脚本。这是 PDF 中标题数据的示例 sn-p,添加了标签:
%PDF-1.3
1 0 obj
<<
/Pages 2 0 R
/PageMode
/UseThumbs
/Type /Catalog
>>
endobj
2 0 obj
<<
/Type /Pages
/Kids [ 3 0 R 17 0 R 31 0 R ]
/Count 3
>>
我正在尝试使用 sed 在第 4 行和第 5 行根据需要插入标签,这也可以,但是当我打开 PDF 时,图像已损坏。神秘地,当我将手动编辑的 PDF(未损坏)与 notepad++ 中的 sed 编辑的 PDF(已损坏)进行比较时,我可以找到的文件没有区别。有不同的字符数,但我找不到差异的位置
我知道 PDF 有一个偏移交叉引用表,但对我来说似乎很奇怪,手动执行不会损坏任何东西,但使用 sed 执行会导致损坏
我做错了什么?
【问题讨论】:
-
如果字节数关闭但您无法直观地确认差异,则表明存在 CR/LF 问题。一个示例 PDF 确实会有所帮助。
-
手动操作不会损坏任何东西 - 一些 PDF 查看器,即 Adobe Reader,倾向于忽略他们知道要处理的某些类型的损坏,并且仅在 PDF 文件以他们无法处理的方式损坏时才抱怨。因此,您的手动更改很可能只是以不同方式损坏了文件。如果@Jongware 的假设差异在于行分隔符,则为真(可能 sed 读取文件 逐行 并且在回写时始终使用其首选行结尾),请注意更改行分隔符压缩流确实会破坏它。
-
您可以使用“diff”和“od”命令吗?我想他们可以让你更好地找到文件不同的地方。正如@Jongware 指出的那样,Notepad++ 可能无法清楚地显示 CR/LF。
-
您可以在Notepad++中开启查看所有特殊字符,这可能有助于您追踪它。
-
使用十六进制编辑器查看会显示额外字符。
标签: python pdf sed notepad++ blender