【问题标题】:PDFBox printing with PrintPDF command line tool使用 PrintPDF 命令行工具打印 PDFBox
【发布时间】: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


【解决方案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);

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

【讨论】:

猜你喜欢
  • 2013-10-09
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 2018-04-11
  • 2019-06-25
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
相关资源
最近更新 更多