我试图以A4尺寸打印pdf,但输出与预期的不同。
这就是它的样子
但它应该是这样的
两张图片的分辨率相同
这是生成此输出的代码。
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();
基本上只是缩水了。我该怎么做才能解决这个问题?
顺便说一下,我没有使用真正的打印机。我使用virtual printer来接受打印请求并输出pdf。
答案 0 :(得分:0)
我找到了解决方法。我使用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();
现在可以正确打印。