用PHP合并不同的PDF格式?

用PHP合并不同的PDF格式?,php,pdf,fpdi,Php,Pdf,Fpdi,我正在尝试将一些PDF文件与合并。对于某些PDF格式,此软件包运行良好,但对于其他格式,则无法运行。 我可以找到三种不同格式的PDF 格式1: %PDF-1.4 %´µ¶· % 1 0 obj << /Type /Catalog /PageMode /UseNone /ViewerPreferences 2 0 R /Pages 3 0 R /PageLayout /OneColumn >> FPDI在格式1中工作得很好,但在格式2中却失败了 当我试图从另一个PDF合并

我正在尝试将一些PDF文件与合并。对于某些PDF格式,此软件包运行良好,但对于其他格式,则无法运行。
我可以找到三种不同格式的PDF

格式1:

%PDF-1.4
%´µ¶·
%
1 0 obj
<<
/Type /Catalog
/PageMode /UseNone
/ViewerPreferences 2 0 R
/Pages 3 0 R
/PageLayout /OneColumn
>>
FPDI在格式1中工作得很好,但在格式2中却失败了

当我试图从另一个PDF合并网站合并格式2的两个文件时,我得到了格式3的合并PDF

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

如果有人能解释这些格式,那也太好了。

“Format 2”是一个损坏的文件,因为它包含无效的头数据,这会损坏PDF中的字节偏移位置(FPDI不会修复这些文件,但需要有效的PDF)


“格式3”只是一组十六进制值,不是PDF文件。

多亏了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的实际内容。

那么,我应该尝试清除标题吗?chrome和其他pdf阅读器是如何读取所有格式的呢?他们试图修复这样的文件,这可能需要大量的性能。独立机构还试图修复常见损坏(并非全部)。在所有这些文件都不是有效的PDF文档之后,您应该要求提供有效版本。谢谢,我将在传递给FPDI之前尝试清理PDF。您不应该依赖PDF版本号。
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
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;
}