在现有的PDF中添加裁剪框和剪切框



对于一个项目,我需要在现有的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

的帮助下重新打包和修复编辑过的PDF
qpdf edited.pdf modified.pdf

您将看到来自QPDF的警告,告诉您输入PDF需要对其xref部分进行一些修复…

最新更新