PHP - 可以采用base64编码的pdf数据字符串并压缩它?

时间:2016-01-14 20:20:57

标签: php xml pdf compression docusignapi

所以我有一个XML文件,它有一个pdf文件的base64编码数据字符串,它只有一张从iPad上取的图像。

这个pdf文件可能过大,多达14MB,尺寸为57“x38”。

这些图像是通过DocuSign会话从iPad上获取的,因此,在他们访问我的php监听器脚本之前,我无法控制它们的大小或格式。

但是,我的脚本无法使用这样大的文件,因为我的CRM的API文件大小最大为10MB,我需要一种方法来减小文件大小,然后才能通过我的CRM API上传。

现在,如果它只是一个jpg,那就没关系,因为有很多方法可以减少PHP中的文件大小,但它是一个PDF。我发现了很多用于制作PDF的PHP扩展,但我没有找到任何用于阅读PDF并从中提取图像的文件。

那么有没有办法通过PHP从PDF中提取图像,或者压缩pdf文件?

更新

我没有考虑将转换 pdf转换为jpg的可能性,显然使用imagick更容易。让我的服务器管理员安装它,我将看看我是否可以使用我的脚本。

更新2

所以我能够让想象力在当地工作,我能够将pdf文件转换为jpg,并大大减少文件大小。

但是,我遇到了与我的应用程序一起使用它的问题。我从CRM的API中收到以下错误:

无法解析XML-RPC请求:1字节UTF-8序列的字节1无效。

所以过程如下:

  1. XML文件具有pdf文件的base64编码数据流。
  2. 我解码此数据
  3. 然后我用imagick转换并缩小文件大小
  4. 我base64编码并准备上传
  5. CODE

            $imageBlob = base64_decode((string)$pdf->PDFBytes);
            $imagick.$x = new Imagick();
            $imagick.$x->readImageBlob($imageBlob);
            $imagick.$x->setImageFormat('jpeg');
            $imagick.$x->setImageCompressionQuality(60);
            $imagick.$x->adaptiveResizeImage(1024,768,true);
            $imageBlob = $imagick.$x->getImageBlob();
            $PDFdata[] = base64_encode($imageBlob);
    

    我可以使用正确的标题测试日期,我可以看到新的jpeg很好,所以我假设数据格式正确。

    我缺少什么?

1 个答案:

答案 0 :(得分:1)

好的,所以我明白了。

Imagick是要走的路,我对它的使用很好。我只是搞砸了文件名,因为我没有使用适当的动态变量名。代码应该是这样的:

CODE

$imageBlob = base64_decode((string)$pdf->PDFBytes);
${'imagick'.$x} = new Imagick();
${'imagick'.$x}->readImageBlob($imageBlob);
${'imagick'.$x}->setImageFormat('jpeg');
${'imagick'.$x}->setImageCompressionQuality(60);
${'imagick'.$x}->adaptiveResizeImage(1024,768,true);
$imageBlob = ${'imagick'.$x}->getImageBlob();
$PDFdata[] = base64_encode($imageBlob);
$PDFfile[] = $FormCustomField . $x . '.jpg';

所以我得到的错误是因为文件名无效,因为前面代码中的$ x变量获得了垃圾值。现在一切正常。