2014-01-16 47 views
5

我正在尝试为搅拌器开发一个python脚本,以便将呈现的图像序列输出到PDF。我使用Imagemagick转换为PDF,该部分工作正常,但是,我希望缩略图预览也包含在PDF中。使用sed编辑PDF属性

PDF格式对我来说有点困惑,但我找到了/PageMode/UseThumbs标签以及如何正确地将它们插入到文件中。我可以手动执行此操作,并且工作得很好。但我一直在试图得到一个类似的结果,而不需要手动完成,毕竟我正在编写一个脚本。这是在PDF标题中的数据为例片段,与添加的标签:

%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(没有损坏)和记事本++中sed编辑过的PDF(已损坏)的情况下,我可以发现文件没有区别。有一个不同的字符数,但我找不到差异的位置

据我所知,PDF有一个偏移交叉引用表,但我似乎很奇怪,手工操作不会破坏任何东西,但做它与sed创造腐败

我在做什么错?

+0

你可以把这两个文件放在某个地方,这样我们可以看看两者吗? – janos

+6

它表明如果字节数已关闭,但您无法直观地确认差异,则存在CR/LF问题。一个样本PDF确实会有所帮助。 – usr2564301

+2

*手工操作不会破坏任何东西* - 某些PDF阅读器,即Adobe Reader,倾向于忽略他们知道处理的某些类型的损害,并且只有在PDF文件以某种方式损坏时才会抱怨无法处理。因此,最有可能的是,您的手动更改仅以不同方式*损坏文件。如果@ Jongware假设差异在行分隔符中,则为true(也许sed逐行读取文件*并在回写中始终使用其首选行结尾),请注意,更改压缩流中的行分隔符字符确实会打破它。 – mkl

回答

2

你真的不希望从sed做到这一点。有些PDF可能看起来像面向行的文本文件,但它们确实不是。

由于您已经在使用Python,因此您可以使用Python库执行此任务。

pdfrw将从纯Python中为您做到这一点。它会淹没在一个PDF文件中,并用你想要的任何改变重建它,并正确地设置文件偏移量。下面的代码段应设置/ PageMode在PDF的/根字典/ UseThumbs:

 
    from pdfrw import PdfReader, PdfWriter, PdfName 

    trailer = PdfReader('myfile.pdf') 
    trailer.Root.PageMode = PdfName.UseThumbs 
    PdfWriter().write('mynewfile.pdf', trailer) 

免责声明:我是pdfrw作者。

+0

我希望我昨天见过这个。 – saulspatz