Проверка PDF-файла перед отправкой в ​​виде вложения электронной почты

Я использую FDPF для создания счетов для клиентов, которые затем прикрепляются к электронному письму и отправляются клиенту. Счета / электронные письма генерируются пакетно (несколько сотен за раз). При первом реальном запуске пакета несколько (около 5 из 200) клиентов получили поврежденные PDF-файлы. Общая связь между ними заключалась в том, что у них были большие счета, чем в среднем, что наводит меня на мысль, что время, необходимое для создания счета, вызывает состояние гонки, и, возможно, электронное письмо отправляется до того, как PDF успеет завершить создание. полностью. Есть ли способ проверить, что PDF-файл не поврежден перед отправкой по электронной почте? Или есть другой способ подойти к проблеме, которую я упускаю из виду?


person Matthew    schedule 17.09.2010    source источник
comment
Как вы его генерируете? Похоже, вы сможете быстро проверить свою гипотезу, создав большой PDF-файл вручную.   -  person Alex    schedule 18.09.2010
comment
Когда я генерирую их по одному, они работают нормально. Я могу сделать тот же пакет, но с электронными письмами, которые приходят на мой собственный адрес, чтобы я мог видеть, что происходит, и возиться с этим таким образом.   -  person Matthew    schedule 18.09.2010


Ответы (2)


Вы можете проверить, полностью ли сгенерирован 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 поток: Повреждённое PDF-вложение электронной почты при создании с помощью FPDF и PHP

person JMC    schedule 18.09.2010

Имейте в виду, что последняя версия Acrobat Reader более требовательна к чтению файлов, которые не соответствуют точно правильному формату PDF.

Начало pdf-документа обозначается строкой %PDF. Старые версии Acrobat игнорировали содержимое файла перед маркером %PDF. Например, вы могли оставить в файле некоторые отладочные данные, как показано ниже:

debug line 1
debug line 2
%PDF-1.4
3 0 obj
<</Type /Page
etc.

и Acrobat откроет это нормально (как и Preview на OSX).

Acrobat больше этого не приемлет.

Меня это укусило, так что надеюсь, что это поможет!

person northernman    schedule 26.11.2014