【问题标题】:Editing PDF attributes using sed使用 sed 编辑 PDF 属性
【发布时间】: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 查看器,即 Adob​​e Reader,倾向于忽略他们知道要处理的某些类型的损坏,并且仅在 PDF 文件以他们无法处理的方式损坏时才抱怨。因此,您的手动更改很可能只是以不同方式损坏了文件。如果@Jongware 的假设差异在于行分隔符,则为真(可能 sed 读取文件 逐行 并且在回写时始终使用其首选行结尾),请注意更改行分隔符压缩流确实会破坏它。
  • 您可以使用“diff”和“od”命令吗?我想他们可以让你更好地找到文件不同的地方。正如@Jongware 指出的那样,Notepad++ 可能无法清楚地显示 CR/LF。
  • 您可以在Notepad++中开启查看所有特殊字符,这可能有助于您追踪它。
  • 使用十六进制编辑器查看会显示额外字符。

标签: python pdf sed notepad++ blender


【解决方案1】:

您真的不想从 sed 执行此操作。有些 PDF 可能看起来像面向行的文本文件,但肯定不是。

由于您已经在使用 Python,因此您可以使用 Python 库来完成此任务。

pdfrw 会在纯 Python 中为您做到这一点。它将在 PDF 文件中啜饮,并使用您想要的任何更改重建它并正确设置文件偏移量。以下代码的 sn-p 应将 PDF 的 /Root 字典中的 /PageMode 设置为 /UseThumbs:

从 pdfrw 导入 PdfReader、PdfWriter、PdfName 预告片 = PdfReader('myfile.pdf') Trailer.Root.PageMode = PdfName.UseThumbs PdfWriter().write('mynewfile.pdf', 预告片)

免责声明:我是 pdfrw 作者。

【讨论】:

  • 我希望我昨天看到了这个。
猜你喜欢
  • 2016-07-19
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多