java打印:纸张尺寸不正确

时间:2016-05-02 14:26:59

标签: java printing awt

我试图以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();

基本上只是缩水了。我该怎么做才能解决这个问题?

顺便说一下,我没有使用真正的打印机。我使用virtual printer来接受打印请求并输出pdf。

1 个答案:

答案 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();

现在可以正确打印。