将裁剪和出血盒添加到现有PDF

时间:2014-07-14 11:11:23

标签: php ghostscript

对于项目,我需要在现有PDF中添加crop-and bleedbox。我尝试过很多东西,但由于某些原因我不能让它发挥作用。我甚至无法放大PDF以便为盒子腾出空间。我也在这个伟大的网站上找不到它。 Ghostscript中有一个函数或方法来做这样的事情吗?

任何人都可以给我一个提示,让我朝正确的方向发展吗?

2 个答案:

答案 0 :(得分:1)

你不能(确切地)使用Ghostscript这样做,因为GS并不简单地修改'现有的PDF文件,当您通过GS发送PDF文件时,它会完全解释它并从位创建一个全新的PDF文件。

您可以使用pdfmark(在PDF文件完成后执行)添加裁剪框和/或出血框,但您创建的PDF文件不会与您开始使用的PDF文件相同。

你能用pdftk这样做吗?

答案 1 :(得分:0)

如果我想在现有PDF的源代码中执行此操作,请使用以下过程:

1。在QPDF

的帮助下解压PDF源代码

QPDF可在此处获取:qpdf.sf.net/。它是一个命令行工具,用于在PDF文件上实现'结构,内容保留转换

在这里,我将输入PDF转换为可编辑的PDF,我可以在任何文本编辑器中轻松加载和修改:

qpdf                      \
 --qdf                    \
 --object-streams=disable \
   input.pdf              \
   editable.pdf

请注意,“可编辑”内部可能仍然存在一些二进制blob。 PDF(例如字体或ICC资源)。因此,您的文本编辑器应该能够优雅地处理它们。

2。在您选择的文本编辑器中修改解压缩(可编辑)PDF

使用您选择的文本编辑器根据需要添加(或修改)/CropBox/BleedBox值。 (如果使用VIm,请使用vim -b运行它。)

(我假设您很清楚PDF规范对各种/*Box值施加的正式和语义限制 - 否则请仔细阅读它们......)

所有PDF文件都至少包含一个(或多个)/MediaBox个条目。搜索他们。每次出现/MediaBox时,请添加其他框值。

2a上。示例:

假设您的文本编辑器显示了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阅读器将无法打开它没有错误或警告信息弹出。

因此,需要最后一步:

3。在QPDF

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

您会看到QPDF发出警告,告诉您输入的PDF需要修复其xref部分...