java打印:纸张大小不正确

java打印:纸张大小不正确,java,printing,awt,Java,Printing,Awt,我正在尝试打印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.set

我正在尝试打印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();
基本上它只是缩小了。我该怎么做才能解决这个问题


顺便说一下,我没有用真正的打印机。我正在使用一个接收打印请求并输出pdf的打印机。

我找到了解决方案。我使用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();

现在可以正确打印了。

您是否有生成表格的代码,因为我看不出这部分代码有任何错误。我的应用程序可以打印和保存pdf。正确的图像(第二张图像)是通过保存图像(当然是A4大小)生成的。不正确的一张(第一张图像)是相同的,但打印出来了。所以我认为表格绘图代码没有问题。