java - Java PrinterJob 自动定位
问题描述
我有一个 PDF,我想用 PrinterJob 打印标签。问题是结果移动了大约 90 度,打印机是 Bixolon SLP-DX223。在驱动程序设置中,我更改了主要和默认设置中的标签尺寸,但打印没有变化。如果我使用 Acrobat Reader 和相同的设置打印 pdf,结果是完美的,但不是使用 PrinterJob 打印。
try {
PDDocument document = PDDocument.load(new File(file));
PrintService myPrintService = findPrintService(printer);
PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(new PDFPageable(document, Orientation.PORTRAIT));
job.setPrintService(myPrintService);
job.setJobName(jobname);
job.setCopies(copies);
job.print();
document.close();
}
catch (PrinterException | IOException e) {
e.printStackTrace();
}
感谢帮助
解决方案
@GilbertLeBlanc 的答案让我得到了结果,纸张的大小没有定义,所以我使用了以下代码:
double labelWidth = 50.8; //width in mm
double labelHeigth = 25.4; //height in mm
labelWidth = labelWidth / 0.353; //calculate size
labelHeight = labelHeight / 0.353; //calculate size
Paper paper = new Paper();
paper.setSize(labelWidth, labelHeight);
paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight());
PageFormat pageFormat = new PageFormat();
pageFormat.setPaper(paper);
Book book = new Book();
book.append(new PDFPrintable(document), pageFormat, document.getNumberOfPages());
job.setPageable(book); //job is the printerjob
推荐阅读
- javascript - 如何使用 HERE maps api 检测用户位置的对象或最近的标记,显示路径,如 route api?
- python - NameError:名称'args'未定义?
- grafana - 如何通过对石墨的一次请求获得一个平均值
- fortran - Fortran 未定义对 _[子例程名称] 的引用
- ios - Ionic 4 - Facebook 插件返回“用户已取消”。在 iOS 上尝试登录时
- node.js - 使用 Azure DevOps 部署 Node.js 应用程序会导致有关缺少模块的错误
- python - 如何从以 m 为底的字符串转换为以 n 为底的字符串
- javascript - 如何在反应节点 js 项目中从客户端创建动态元标记?
- r - 如何在 facet_nested 中订购 x 轴
- python - 如何在 GPU 上有效地并行化 AlphaZero?