使用PrintPDF命令行工具打印PDFBox

使用PrintPDF命令行工具打印PDFBox,pdf,printing,base64,pdfbox,dhl,Pdf,Printing,Base64,Pdfbox,Dhl,我正在使用DHL Shipping(XML)API来请求DHL装运并自动打印响应的装运标签 这就是系统的工作原理: DHL响应XML包含base64编码的pdf,其中包含: 第1页。装运标签(打印在包装上的标签上) 第2页。存档文件(需要单独打印并交给快递员) 为了分离这两个PDF,我首先解码base64,然后使用PDFBox命令行工具执行PDFSplit,最后在各自的打印机上打印各自的文档: $filename = "dhlexpress_labels/".date("Ymd_his")."_

我正在使用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
上,但在
纸质打印机上却无法打印标签的左侧和顶部5mm。
见附图:

我认为这是因为pdf以某种方式覆盖了边距,导致pdf移动到可打印区域之外


有人知道解决这个问题的方法吗?我希望印刷完全自动化,并将停止在任何长度这样做。我只是想知道是否有人对如何编辑pdf页边距有任何创造性的想法

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

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

$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);
我尝试使用
PrintPDF
的“方向”属性,但实际上它使它变小了:
方向:水平方向完全乱了。图片包含在下面的评论中

请尝试2.0.2版本。还有一个2.0.3快照有一个新的选项可能会有所帮助。如果它不起作用,请上传一个演示贴纸。谢谢@Tilmahausher我使用了2.0.3快照。“定位”选项就是你所说的吗?是的。但是,没有“垂直”选项。有纵向和横向。PDFBox存在重新标签打印问题,例如。这篇文章甚至提到了一个变通方法,但它需要使用java。