1

我正在使用 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 边距有任何创意。

4

1 回答 1

1

我想出了一个解决办法。使用 OverlayPDF,我将存档文档覆盖到空白 PDF 上,它显示在中间,如下所示:Centered Label

我刚刚添加了这两行代码,它就像一个魅力:

$exec = java -jar pdfbox-app-2.0.3-20160908.164926-191.jar OverlayPDF blank.pdf '. str_replace('.pdf','-1'.'.pdf',$filename) .' '. str_replace('.pdf','-1'.'.pdf',$filename);
exec($exec);

我尝试使用 'orientation' 属性PrintPDF,但它实际上使它变小了: Orientation: vertical Orientation: Horizo​​ntal 完全搞砸了。图片包含在下面的评论中。

于 2016-09-13T03:46:57.483 回答