【问题标题】:PDF manipulation - images are distorted after few consecutive operations on PDF filePDF 操作 - 对 PDF 文件进行几次连续操作后,图像会失真
【发布时间】:2017-07-12 08:19:36
【问题描述】:

我在处理 PDF 文件时遇到了这个奇怪的问题。不确定 SO 是否是问这个问题的正确地方,但我找不到任何具体的网站。我希望有人能对这个问题有所了解。

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

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

根据请求,源文件在 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 解密文件)粘贴的图像看起来正确:

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

  • Word doc 打印为 PDF,没有保护
  • mPDF 输出不受保护。

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

编辑 1

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

似乎有一些东西试图将白色转换为 alpha 并且失败了。

【问题讨论】:

  • 您能否分享在所述工作流程中使用/制作的所有 PDF?
  • @JanSlabon 我在这里无权访问任何文件共享服务,也无法将文件附加到问题中。怎么办?
  • @JanSlabon 好的,这里是download密码:pdf
  • 看起来 mPDF 在 PDF 字符串中的八进制表示法存在问题。它们不会被解释,但在字符串值“\000”中,字符串\000 将作为一个整体被加密,而不是值0x00 的单个字节。随时报告此问题here。他们只是缺少对字符串进行转义,例如完成here.
  • 我刚刚给 Mpdf 发了一个pull request 应该可以解决这个问题。

标签: php pdf encryption ms-word mpdf


【解决方案1】:

Mpdf 的当前版本 (6.1) 存在一个错误,如果应加密转义的 PDF 字符串(通过 FPDI 导入),则无法正确处理。

可通过here 获取修复此问题的拉取请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-18
    • 2018-10-05
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多