【发布时间】:2017-01-20 02:42:09
【问题描述】:
我正在使用 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 的回复包含一个 8"x4" 贴纸尺寸的 pdf,它在 DHLPrinter 上完美打印,但在 PaperPrinter 上它不打印左侧和标签顶部 5mm。
见附图:
我认为这是因为边距被 pdf 以某种方式覆盖,导致 pdf 移动到可打印区域之外。
有人知道解决这个问题的方法吗?我希望打印完全自动化,并且会不遗余力地这样做。我只是想知道是否有人对如何编辑 pdf 边距有任何创意。
【问题讨论】:
-
请尝试2.0.2版本。还有一个 2.0.3 快照 repository.apache.org/content/groups/snapshots/org/apache/… 有一个新选项可能会有所帮助。
-
如果不行,请上传demo贴纸。
-
感谢@TilmanHausherr 我使用了 2.0.3 快照。你说的是“方向”选项吗?
-
是的。但是没有“垂直”选项。有纵向和横向。
标签: pdf printing base64 pdfbox dhl