Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/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_Pdf_Merge - Fatal编程技术网

用PHP合并两个半页PDF文档

用PHP合并两个半页PDF文档,php,pdf,merge,Php,Pdf,Merge,我的一个朋友在一家报纸工作,他在周一问我这个问题,我无法确认这是否可行 我知道可以使用PHP合并2个PDF(正如我看到许多其他问题已经回答的那样),但我不确定的是,我是否可以合并半页PDF以填充另一个PDF中的空间 想象一下: 我有一个PDF1:半页的PDF,然后我有一个3页的PDF:Pdf2。 在PDF2的第一页,我有一个空的空间来容纳PDF1 我能做这个吗?如何做?我不能给出具体的源代码,但我可以在非常低的级别上解释如何做。此外,你所寻找的与出版业中所谓的强加类似 开始时的方式与合并相同,这

我的一个朋友在一家报纸工作,他在周一问我这个问题,我无法确认这是否可行

我知道可以使用PHP合并2个PDF(正如我看到许多其他问题已经回答的那样),但我不确定的是,我是否可以合并半页PDF以填充另一个PDF中的空间

想象一下: 我有一个PDF1:半页的PDF,然后我有一个3页的PDF:Pdf2。 在PDF2的第一页,我有一个空的空间来容纳PDF1


我能做这个吗?如何做?

我不能给出具体的源代码,但我可以在非常低的级别上解释如何做。此外,你所寻找的与出版业中所谓的强加类似

开始时的方式与合并相同,这意味着从另一个文档中提取页面。必须递归地引入页面的所有依赖项。但要注意避免无限循环,因为PDF中确实存在无限循环,所以必须跟踪访问的对象。不要使用递归函数,因为堆栈很容易溢出,PDF引用可能很深。您应该在堆上实现遍历递归(深度优先搜索很好)

在PDF上标记PDF的关键是将源页面对象转换为XObject表单(不要与AcroForms或可填充表单字段混合)。XObject表单与页面对象非常相似,但有以下例外:

  • /Type/Page
    变为
    /Type/XObject/Subtype/Form
  • 页面
    MediaBox
    CropBox
    一起成为表单中的
    /BBox
    。但是要小心,它们都可以通过页面树继承,因此必须查找继承的属性
  • 页面
    Rotate
    (也可继承)变为
    Matrix
    ,它是一个变换(旋转)矩阵,而不是一个角度
  • 页面的
    资源
    元数据
    可以原封不动地引入并添加到表单对象中
  • 页面
    内容
    流必须传输到表单。但是,页面
    内容
    是一个外部对象,可能是一个数组,这意味着您需要合并这些片段。XObject表单是一个流对象
  • 所有其他属性都很棘手,如果不确定,您可能希望忽略它们
完成后,您所要做的就是在新页面上绘制XObject表单。您必须为XObject生成一个唯一的名称,并将其添加到页面的
资源中。绘制本身是一系列的
cm
Do
操作符,就像绘制图像一样。如果需要裁剪原始内容,则还需要在
Do
之前设置剪辑路径

不用说,这绝非小事,而且还有很多陷阱。我已经实现了这一点,我可以告诉你它确实有效,但它比看起来更难。你必须有一个非常好的低级PDF库,并且对PDF规范有非常透彻的理解

我没有讨论其他一些细节,例如颜色管理(如果在托管CMYK上绘制DeviceRGB会怎么样)、PDF/A、PDF/X、传输注释和表单字段等

如果这超出了您的能力范围,那么您应该寻找一个开源的强制执行库,因为它的功能基本相同。强加是指在一张空白纸上放置两页或两页以上的内容,目的是印刷一本书或一份传单。我也有一个商业解决方案