对于项目,我需要在现有PDF中添加crop-and bleedbox。我尝试过很多东西,但由于某些原因我不能让它发挥作用。我甚至无法放大PDF以便为盒子腾出空间。我也在这个伟大的网站上找不到它。 Ghostscript中有一个函数或方法来做这样的事情吗?
任何人都可以给我一个提示,让我朝正确的方向发展吗?
答案 0 :(得分:1)
你不能(确切地)使用Ghostscript这样做,因为GS并不简单地修改'现有的PDF文件,当您通过GS发送PDF文件时,它会完全解释它并从位创建一个全新的PDF文件。
您可以使用pdfmark(在PDF文件完成后执行)添加裁剪框和/或出血框,但您创建的PDF文件不会与您开始使用的PDF文件相同。
你能用pdftk这样做吗?
答案 1 :(得分:0)
如果我想在现有PDF的源代码中执行此操作,请使用以下过程:
QPDF可在此处获取:qpdf.sf.net/。它是一个命令行工具,用于在PDF文件上实现'结构,内容保留转换。
在这里,我将输入PDF转换为可编辑的PDF,我可以在任何文本编辑器中轻松加载和修改:
qpdf \
--qdf \
--object-streams=disable \
input.pdf \
editable.pdf
请注意,“可编辑”内部可能仍然存在一些二进制blob。 PDF(例如字体或ICC资源)。因此,您的文本编辑器应该能够优雅地处理它们。
使用您选择的文本编辑器根据需要添加(或修改)/CropBox
和/BleedBox
值。 (如果使用VIm,请使用vim -b
运行它。)
(我假设您很清楚PDF规范对各种/*Box
值施加的正式和语义限制 - 否则请仔细阅读它们......)
所有PDF文件都至少包含一个(或多个)/MediaBox
个条目。搜索他们。每次出现/MediaBox
时,请添加其他框值。
假设您的文本编辑器显示了PDF源代码的这一部分:
%% Page 1
%% Original object ID: 11 0
3 0 obj
<<
/Contents 5 0 R
/MediaBox [
0
0
595
841
]
/Parent 2 0 R
/Resources <<
/Font <<
/F0 9 0 R
/F1 10 0 R
>>
/ProcSet [
/PDF
/Text
]
>>
/Type /Page
>>
endobj
您可以添加以下行:/CropBox [10 200 370 600]
以添加CropBox(将整个页面的显示或打印部分限制到定义的区域):
%% Page 1
%% Original object ID: 11 0
3 0 obj
<<
/Contents 5 0 R
/MediaBox [
0
0
595
841
]
/CropBox [10 200 370 600]
/Parent 2 0 R
/Resources <<
/Font <<
/F0 9 0 R
/F1 10 0 R
>>
/ProcSet [
/PDF
/Text
]
>>
/Type /Page
>>
endobj
并将其另存为&#39; edited.pdf&#39; 。
请注意,保存此修改过的PDF后,它将被“损坏”#39;在某种意义上,附加行将使PDF的目录(即其xref
部分)无效,并且许多PDF阅读器将无法打开它没有错误或警告信息弹出。
因此,需要最后一步:
qpdf edited.pdf modified.pdf
您会看到QPDF发出警告,告诉您输入的PDF需要修复其xref
部分...