对于一个项目,我需要在现有的PDF中添加一个裁剪和出血框。我尝试了很多方法,但由于某种原因,我没有成功。我甚至不能放大PDF来为盒子腾出空间。我也找不到它在这个伟大的网站。Ghostscript中是否有一个函数或方法来做这样的事情?
谁能给我一个提示,引导我在正确的方向?你不能这样做(完全)与Ghostscript,因为GS不简单地"修改"一个现有的PDF文件,当你通过GS发送一个PDF文件,它完全解释它,并创建一个全新的PDF文件从比特。
您可以使用pdfmark(在PDF文件完成后执行)来添加裁剪框和/或流血框,但您创建的PDF文件将与您开始时的PDF文件不同。
你不能用pdftk这样的东西吗?
如果我想在现有PDF的源代码中这样做,我将使用以下过程:
1。在QPDF
的帮助下解压缩PDF源代码QPDF可在这里获得:qpdf.sf.net/。它是一个命令行工具,用于实现"PDF文件上的结构化、内容保留转换"。
这里,我将把输入的PDF转换成一个可编辑的PDF,我可以很容易地在任何文本编辑器中加载和修改:
qpdf
--qdf
--object-streams=disable
input.pdf
editable.pdf
注意,在"可编辑的"PDF中可能仍然有一些二进制blob(例如字体或ICC资源)。因此,您的文本编辑器应该能够优雅地处理这些。
2。在您选择的文本编辑器中修改未打包(可编辑)的PDF
根据需要使用您选择的文本编辑器添加(或修改)/CropBox
和/BleedBox
值。(如果使用VIm,请使用vim -b
运行)
(我假设您非常了解PDF规范对各种/*Box
值施加的形式和语义限制—否则请阅读有关它们的一些内容…)
所有pdf将包含至少一个(或多个)/MediaBox
条目。寻找他们。对于每次出现/MediaBox
,添加其他框值。
2 a。例子:
假设您的文本编辑器显示了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
并保存为'edited.pdf'。注意,在保存这个修改后的PDF后,它将被"损坏",即额外的行将使PDF的目录(即其xref
部分)无效,并且许多PDF阅读器将无法打开它而没有错误或警告消息弹出。
因此,需要最后一步:
3。在QPDF
的帮助下重新打包和修复编辑过的PDFqpdf edited.pdf modified.pdf
您将看到来自QPDF的警告,告诉您输入PDF需要对其xref
部分进行一些修复…