Я использую API DHL Shipping (XML), чтобы запрашивать доставку DHL и автоматически распечатывать ответную накладную.
Вот как работает система:
XML-файл ответа DHL содержит PDF-файл в кодировке base64, который содержит:
Страница 1. Транспортная этикетка (печатается на наклейке, наклеенной на упаковку)
Страница 2. Архивный документ (необходимо распечатать отдельно и передать курьеру)
Чтобы разделить два PDF-файла, я сначала декодирую base64, затем выполняю PDFSplit с помощью инструментов командной строки PDFBox и, наконец, печатаю каждый соответствующий документ на соответствующем принтере:
$filename = "dhlexpress_labels/".date("Ymd_his")."_{$_REQUEST['id']}.pdf";
//Get the pdf response from DHL
$data = file_get_contents("path/dhl_request_shipment.php?".http_build_query($_REQUEST));
//Put decoded data in the file
file_put_contents($filename,base64_decode($data));
//Split the file into two
$exec = 'java pdfbox-app-1.8.3.jar PDFSplit -split 1 ' . $filename;
exec($exec);
//Print each file
$exec = 'java pdfbox-app-1.8.3.jar PrintPDF -silentPrint -printerName DHLPrinter ' . str_replace('.pdf',-0.'.pdf',$filename);
exec($exec);
$exec = 'java pdfbox-app-1.8.3.jar PrintPDF -silentPrint -printerName PaperPrinter ' . str_replace('.pdf',-1.'.pdf',$filename);
exec($exec);
Проблема в следующем: ответ от DHL содержит pdf-файл размером с наклейку 8 x 4 дюйма, который отлично печатается на DHLPrinter
, но на PaperPrinter
не печатаются левые и верхние 5 мм этикетки. Смотрите прикрепленную картинку:
Я думаю, это происходит из-за того, что поля каким-то образом перекрываются PDF-файлом, что приводит к перемещению PDF-файла за пределы области печати.
Кто-нибудь знает способ исправить это? Я хочу, чтобы печать была полностью автоматизирована, и ни перед чем не остановлюсь. Мне просто интересно, есть ли у кого-нибудь творческие идеи о том, как редактировать поля PDF.