Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将裁剪框和分格框添加到现有PDF_Php_Ghostscript - Fatal编程技术网

Php 将裁剪框和分格框添加到现有PDF

Php 将裁剪框和分格框添加到现有PDF,php,ghostscript,Php,Ghostscript,对于一个项目,我需要在现有的PDF文件中添加一个裁剪和bleedbox。我尝试了很多东西,但由于某些原因,我没有让它发挥作用。我甚至无法放大PDF文件来为盒子腾出空间。我在这个很棒的网站上也找不到它。Ghostscript中有没有函数或方法可以执行这样的操作 有人能给我一个提示,告诉我正确的方向吗?你不能(准确地)用Ghostscript来做这件事,因为GS并不是简单地“修改”一个现有的PDF文件,当你通过GS发送PDF文件时,它会完全解释它,并根据比特创建一个全新的PDF文件 您可以使用pdf

对于一个项目,我需要在现有的PDF文件中添加一个裁剪和bleedbox。我尝试了很多东西,但由于某些原因,我没有让它发挥作用。我甚至无法放大PDF文件来为盒子腾出空间。我在这个很棒的网站上也找不到它。Ghostscript中有没有函数或方法可以执行这样的操作

有人能给我一个提示,告诉我正确的方向吗?

你不能(准确地)用Ghostscript来做这件事,因为GS并不是简单地“修改”一个现有的PDF文件,当你通过GS发送PDF文件时,它会完全解释它,并根据比特创建一个全新的PDF文件

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


你不能用pdftk这样的东西吗?

如果我想在现有PDF的源代码中这样做,我会使用以下过程:

1.在QPDF的帮助下解压PDF源代码 QPDF在此处可用:。它是一个命令行工具,用于实现“PDF文件上的结构化、内容保留转换”

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

qpdf                      \
 --qdf                    \
 --object-streams=disable \
   input.pdf              \
   editable.pdf
请注意,“可编辑”PDF中可能仍有一些二进制blob(如字体或ICC资源)。因此,您的文本编辑器应该能够优雅地处理这些问题

2.在您选择的文本编辑器中修改未打包(可编辑)的PDF 使用您选择的文本编辑器根据需要添加(或修改)
/CropBox
/BleedBox
值。(如果使用VIm,请使用
VIm-b
运行它)

(我假设您很清楚PDF规范对各种
/*框
值施加了哪些形式和语义限制,否则请阅读一些有关这些值的内容……)

所有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

并将其另存为“edited.pdf”

请注意,保存此修改后的PDF后,它将“损坏”,因为附加行将使PDF的目录(即其
xref
部分)无效,并且许多PDF阅读器将无法打开它而不会弹出错误或警告消息

因此,需要最后一步:

3.在QPDF的帮助下重新打包并修复已编辑的PDF 您将看到来自QPDF的警告,告诉您输入PDF需要对其
xref
部分进行一些修复

%% 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 
>>
qpdf edited.pdf modified.pdf