将不同的PDF格式与PHP合并?

时间:2016-11-10 16:00:54

标签: php pdf fpdi

我正在尝试将少量PDF文件合并到Setasign FPDI。这个软件包适用于某些PDF格式,但对其他格式不适用 我可以找到三种不同格式的PDF。

格式1:

%PDF-1.4
%´µ¶·
%
1 0 obj
<<
/Type /Catalog
/PageMode /UseNone
/ViewerPreferences 2 0 R
/Pages 3 0 R
/PageLayout /OneColumn
>>

格式2:

--uuid:3c4caf6a-2a7e-4ca5-9e0a-63346610deae
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <1>

%PDF-1.4
%âãÏÓ
1 0 obj
<</ColorSpace/DeviceGray/Subtype/Image

格式3:

2550 4446 2d31 2e34 0a25 aaab acad 0a34
2030 206f 626a 0a3c 3c0a 2f43 7265 6174
6f72 2028 4170 6163 6865 2046 4f50 2056
6572 7369 6f6e 2031 2e30 290a 2f50 726f
6475 6365 7220 2841 7061 6368 6520 464f
5020 5665 7273 696f 6e20 312e 3029 0a2f
4372 6561 7469 6f6e 4461 7465 2028 443a
3230 3136 3131 3130 3135 3437 3532 5a29
0a3e 3e0a 656e 646f 626a 0a35 2030 206f

FPDI在格式1中运行良好,但格式2失败。

当我尝试合并来自另一个PDF合并网站的格式2 中的两个文件时,我在格式3中合并了pdf。

我的问题是如何将2 格式2 文件合并到PHP中的任何格式。

如果有人能解释这些格式,那也会很棒。

2 个答案:

答案 0 :(得分:1)

&#34;格式2&#34;是一个损坏的文件,因为它包含无效的标题数据,这将破坏PDF中的字节偏移位置(FPDI不会修复此类文件,但需要有效的PDF)。

&#34;格式3&#34;只是一堆十六进制值而不是PDF文件。

答案 1 :(得分:0)

感谢Setasign的回答,我已将无效格式清除为有效格式。 我正在使用简单的内容拆分。

public function parseRawResponse($raw, $from)
{
    $positionMap = [
        'PDF' => [ 'init' => "%PDF-1.4\n", 'end' => "\n%%EOF"]
    ];
    $initPos = strpos($raw,$positionMap[$from]['init']);
    $endPos = strrpos($raw, $positionMap[$from]['end']) + strlen($positionMap[$from]['end']);
    $content = substr($raw, $initPos, ($endPos - $initPos));
    return $content;
}

其中$raw为格式2,$content为PDF的实际内容。