PDF 操作 - 对 PDF 文件进行几次连续操作后图像失真

PDF manipulation - images are distorted after few consecutive operations on PDF file

我 运行 遇到了这个 PDF 文件处理的奇怪问题。不确定 SO 是否适合提出这个问题,但我找不到任何具体的网站。我希望有人能阐明这个问题。

如果省略某些步骤,则在以下特定过程中会发生这种情况 - 不会观察到该问题。

我有一个 PHP 应用程序可以为用户提供 PDF 文件。这些文件由作者在 MS Word 2007 中创建,然后打印为受保护的 PDF(很可能使用 pdf995,如果需要我可以确认)。 我将在下文中将此初始 PDF 文件称为 'source'。

根据要求,源文件在 PHP 中按以下方式处理:

我们使用qpdf解密:

qpdf --decrypt "source.pdf" "tmp_output.pdf"

然后我们给它添加安全标签/wartermark,使用 mPDF 6.0:

加密并输出到浏览器
$mpdf = new mPDF();
$mpdf->SetImportUse();

$pagecount = $mpdf->SetSourceFile($fpath);
if ($pagecount) {
    for ($i=1;$i<=$pagecount;$i++){
    $tplId = $mpdf->ImportPage($i);
    $mpdf->UseTemplate($tplId);

    $html = '[security label / watermark contents...]';

    $mpdf->WriteHTML($html);
   }
}

$mpdf->SetProtection(array('copy','print'), '', 'password',128);

$mpdf->Output('final_output.pdf','I');

按照上述确切步骤,粘贴到 Word 文档中的输出图像如下所示:

在源 PDF 中,tmp_output(qpdf 解密文件)粘贴的图像看起来正确:

如果出现以下任何一种情况,则不会发生失真:

如您所见,因素太多,所以我不知道去哪里寻找错误。 每个组件都可以自己正常工作,我找不到有关该问题的任何信息。非常感谢任何见解。

编辑 1

经过更多测试,这似乎只发生在从网络浏览器、Windows 资源管理器、MS Word 截取的屏幕截图上。无法使用 Gimp 的屏幕截图重现此内容。

似乎在尝试将白色转换为 alpha 时失败了。

当前版本 (6.1) 的 Mpdf 有一个错误,它不能正确处理转义的 PDF 字符串(通过 FPDI 导入)是否应该加密。

修复此问题的拉取请求可用 here