如何使用pdftk和/MediaBox裁剪PDF边距

7

我使用pdftk工具对PDF文件进行解压缩,然后将其作为文本文件打开。
我想要编辑/MediaBox字段,这在我的情况下是:

/MediaBox [0 0 612 792]

我想要缩小边距,例如

/MediaBox [100 0 512 792]

很遗憾,它无法正常工作。我可以将0更改为29,但我无法输入例如100这样的数字。

有什么想法是为什么吗?


这不是一个编程问题,应该移动到网络的另一个站点。 - anddam
3个回答

15
字符串100比0多两个数字。当你使用文本编辑器添加字符时,文件会变长。这就是为什么用9、2或任何其他单个数字替换可以正常工作的原因。虽然理论上可以使用文本编辑器编辑pdf,但这并不简单,你必须尊重文件的内部结构。xref表是pdf末尾附近的一个表格,告诉读者每个对象的确切位置。每当更改任何内容的长度或位置时,都必须更改它。以上是编程相关内容。
手动使用pdftk的方法无法工作的原因是你在文件中心添加了两个字节。这破坏了xref表。如果你手动更新所有的xrefs,这将起作用,但可能非常繁琐。使用sed或任何其他文本编辑工具都无法解决这个问题。podofo可以为你计算xref。

1- "在文件中心添加两个字节"是什么意思,xref表又是什么? 2- 那么你有什么建议? - RockScience
我建议采用@Dingo和Dr Gorb已经提出的方法,即使用专门设计用于操作pdf的软件或代码。 - James Duvall

9

使用sed替换任何出现

sed 's/MediaBox \[0 0 612 792*/MediaBox \[100 0 512 792]/g'<in.pdf >out.pdf

或者使用podofobox(在podofo utils内部)

无需先解压缩PDF流(如需要pdftk),即可进行操作

podofobox in.pdf out.pdf media 10000 0 51200 79200

正如您所看到的,podofobox使用MediaBox值乘以100,因为其比例是子倍数,所以您只需要在MediaBox字段中读取的值后添加两个零(00)即可。


5

我已经尝试了最后一个 Ghostscript(9.10),但它对我不起作用。另一方面,被接受的答案中的 podofobox 确实可行。 - Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接