我正在使用 FDPF 为客户生成发票,然后将其附加到电子邮件并发送给客户。发票/电子邮件是成批生成的(一次几百个)。在该批次的第一次实际运行中,少数(大约 200 名客户中有 5 名)收到了损坏的 PDF。他们之间的共同联系是他们的发票比平均水平大,这让我相信生成发票所花费的时间导致了竞争条件,并且可能在 PDF 有时间完成生成之前发送了电子邮件完全地。有没有办法在发送电子邮件之前验证 PDF 没有损坏?还是有另一种方法来解决我忽略的问题?
问问题
285 次
2 回答
0
您可以通过在第一次发送文件时为 pdf 创建一个 md5 哈希来测试 pdf 是否完全生成,然后在发送电子邮件时再次创建,最后在发送后。如果 md5 每次都更改,则在发送电子邮件时,pdf 生成器仍在创建文件。
这是一个关于如何使用 md5 哈希的示例:
<?php
$file_name = 'md5_demonstration_file';
$file_changer = 0;
while($file_changer < 10)
{
file_put_contents($file_name, $file_changer);
echo md5_file ($file_name) . '</br>';
$file_changer++;
}
?>
您会注意到 md5 哈希值在函数的每次迭代中都会发生变化,因为文件仍在被写入。如果您尝试此示例代码,您可能必须手动设置“md5_demonstration_file”的权限,以便任何人都可以写入它。
如果竞争条件不是问题,您是否阅读过此 SO 建议线程:Corrupt PDF email attachment when generated by FPDF and PHP
于 2010-09-18T03:50:36.150 回答
0
请注意,最新版本的 Acrobat 阅读器对于阅读不完全符合正确 pdf 格式的文件比较麻烦。
pdf 文档的开头由字符串 %PDF 指示。旧版本的 Acrobat 会忽略出现在 %PDF 标记之前的文件内容。例如,您可能在文件中留下了一些调试输出,如下所示:
debug line 1
debug line 2
%PDF-1.4
3 0 obj
<</Type /Page
etc.
并且 Acrobat 会正常打开(OSX 上的 Preview 也一样)。
Acrobat 将不再接受这一点。
我被它咬了,所以希望这有帮助!
于 2014-11-26T20:55:20.483 回答