Java打印:纸张大小不正确

3
我正在尝试以A4纸张大小打印PDF文件,但输出结果与预期不同。
以下是实际效果: enter image description here 而应该是这样的: enter image description here 两张图片的分辨率相同。
以下是生成此输出的代码。
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintService(service);
PageFormat pf = new PageFormat();
Paper paper = new Paper();
paper.setSize(595, 842); // a4 in px
paper.setImageableArea(0, 0, 595, 842);
pf.setPaper(paper);

Book book = new Book();
book.append(pages, pf, pdfFile.getNumPages());
pj.setPageable(book);

pj.print();

基本上就是它缩小了。我应该怎么做才能修复它呢?
顺便说一下,我没有使用真实的打印机。我使用的是一个虚拟打印机,接收打印请求并输出PDF。(链接)

你有生成表格的代码吗?因为我在这部分代码中没有发现任何问题。 - namlik
我的应用程序既可以打印又可以保存PDF。正确的图像(第二张图)是通过保存图像(当然是A4大小)生成的。而不正确的图像(第一张图)相同,但是是打印出来的。因此,我认为表格绘制代码没有问题。 - bazi
1个回答

2
我已找到解决方法。我使用javax.print库代替java.awt.print。
File file = new File("path/to/pdf");
DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;
PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
attr.add(MediaSizeName.ISO_A4);
FileInputStream fis = new FileInputStream(file);
Doc doc = new SimpleDoc(fis, flavor, null);
DocPrintJob job = printService.createPrintJob();
job.print(doc, attr);
fis.close();

现在它被正确地打印出来。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接