使用Java PrinterJob打印Bixolon SLP-DX223标签PDF出现90度偏移如何解决
解决方案
核心原因是Java打印服务的默认方向参数覆盖了驱动层面的配置,且硬编码的Orientation.PORTRAIT未和标签实际输出需求匹配,可按以下步骤调整代码:
- 移除硬编码的固定纵向方向设置,新增显式打印属性集,强制指定打印方向,匹配驱动中的标签配置
- 优先使用
Orientation.AUTO让PDFBox自动适配PDF本身的页面方向,避免和PDF内置方向冲突 - 如果方向依旧偏移,可两两组合调整打印属性的方向值和PDFPageable的方向值,热敏标签打印机的方向定义常和Java打印服务的标准定义存在90度差值
修改后参考代码
import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.standard.OrientationRequested; import org.apache.pdfbox.printing.Orientation; // 业务逻辑部分 try { PDDocument document = PDDocument.load(new File(file)); PrintService myPrintService = findPrintService(printer); PrinterJob job = PrinterJob.getPrinterJob(); // 显式配置打印属性,和驱动内设置的标签参数对齐 HashPrintRequestAttributeSet printAttrs = new HashPrintRequestAttributeSet(); // 按需调整为PORTRAIT/LANDSCAPE/REVERSE_LANDSCAPE测试 printAttrs.add(OrientationRequested.LANDSCAPE); // 使用AUTO自动适配PDF原生方向,也可手动指定为你需要的方向 job.setPageable(new PDFPageable(document, Orientation.AUTO)); job.setPrintService(myPrintService); job.setJobName(jobname); job.setCopies(copies); // 打印时传入自定义属性集,覆盖默认参数 job.print(printAttrs); document.close(); } catch (PrinterException | IOException e) { e.printStackTrace(); }
额外排查方案
如果调整后依旧偏移,可在打印前遍历PDF所有页面,手动旋转页面适配输出方向:
for (PDPage page : document.getPages()) { // 按需调整旋转角度为90/180/270 page.setRotation(90); }
内容的提问来源于stack exchange,提问作者MrUnknown
相关产品推荐
相关产品推荐

