私は FDPF を使用して顧客の請求書を生成し、電子メールに添付して顧客に送信しています。請求書・メールは一括(数百件単位)で作成されます。バッチの最初の実世界での実行では、少数 (200 人中約 5 人) の顧客が破損した PDF を受け取りました。それらの間の共通のリンクは、平均よりも大きな請求書を持っていたということでした。これにより、請求書の生成にかかる時間が競合状態を引き起こし、PDF の生成が完了する前に電子メールが送信されている可能性があります。完全に。電子メールを送信する前に、PDF が破損していないことを確認する方法はありますか? または、私が見落としている問題にアプローチする別の方法はありますか?
2 に答える
Acrobat Reader の最新バージョンは、正しい pdf 形式に正確に準拠していないファイルの読み取りに神経質になっていることに注意してください。
PDF ドキュメントの開始は、文字列 %PDF で示されます。Acrobat の古いバージョンでは、%PDF マーカーの前にあるファイル コンテンツが無視されます。たとえば、次のように、デバッグ出力をファイルに残している可能性があります。
debug line 1
debug line 2
%PDF-1.4
3 0 obj
<</Type /Page
etc.
そしてAcrobatはそれを問題なく開きます(OSXでのプレビューと同様)。
Acrobat はもうそれを受け入れません。
私はそれに噛まれたので、これが役立つことを願っています!
ファイルの最初の送信時に 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 推奨スレッドを読んでください: FPDF および PHP によって生成されたときに破損した PDF メールの添付ファイル