我正在使用 DHL Shipping (XML) API 来请求 DHL 发货并自动打印回复的发货标签。
这是系统的工作原理:
DHL 响应 XML 包含一个 base64 编码的 pdf,其中包含:
第 1 页. 运输标签(打印在贴在包装上的不干胶标签上)
第 2 页 存档文件(需单独打印并交给快递公司)
为了分离两个 pdf,我首先对 base64 进行解码,然后使用 PDFBox 命令行工具执行 PDFSplit,最后在各自的打印机上打印每个文档:
$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"x4" 贴纸,可以完美地打印在 上DHLPrinter
,但PaperPrinter
不会打印标签的左侧和顶部 5 毫米。见附图:
我认为发生这种情况是因为 pdf 以某种方式覆盖了边距,导致 pdf 移动到可打印区域之外。
有谁知道解决这个问题的方法?我希望打印完全自动化,并且会不遗余力地这样做。我只是想知道是否有人对如何编辑 pdf 边距有任何创意。