【问题标题】:Merging Different PDF formats with PHP?用 PHP 合并不同的 PDF 格式?
【发布时间】:2016-11-10 16:00:54
【问题描述】:

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

格式一:

%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 个 Format 2 文件合并为 PHP 中的任何格式。

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

【问题讨论】:

    标签: php pdf fpdi


    【解决方案1】:

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

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

    【讨论】:

    • 那么,我应该尝试清除标题吗?以及如何让 chrome 和其他 pdf 阅读器阅读所有​​格式。
    • 他们尝试修复此类文件,这可能会占用大量性能。单独的FPDI PDF-Parser 也尝试修复常见的损坏(不是全部)。毕竟这些文件都不是有效的 PDF 文件,你应该要求一个有效的版本。
    • 谢谢,我会在传递给 FPDI 之前尝试清理 pdf。
    【解决方案2】:

    感谢 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 的实际内容。

    【讨论】:

    • 您不应依赖 PDF 版本号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多