理论上,您可以通过在 Paper 对象上调用 setImageableArea 来消除打印作业的默认边距,从而使 PDF 适合纸张。
PDFFile pdfFile = new PDFFile(ByteBuffer.wrap(pdfBytes));
PDFPrintPage pages = new PDFPrintPage(pdfFile);
PrinterJob job = PrinterJob.getPrinterJob();
Paper paper = new Paper();
paper.setSize(595, 842); // A4 dimensions in font points
// Make the document fill the whole page without stupid extra margins!
paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight());
PageFormat pageFormat = new PageFormat(); // or printerJob.defaultPage();
pageFormat.setPaper(paper);
pageFormat.setOrientation(PageFormat.PORTRAIT);
Book book = new Book();
book.append(pages, pageFormat, pdfFile.getNumPages());
job.setPageable(book);
if (job.printDialog()) {
job.print();
}
现在,Java 中存在一个错误,它弄乱了方向,导致即使上面的代码也有额外的空间。
要解决这个问题,请转到 this page,向下滚动约 70%,然后在 2009 年 12 月 19 日晚上 7:47 寻找 Barrett 的答案,他建议将 setImageableArea 宽度加倍:
paper.setImageableArea(0, 0, paper.getWidth() * 2, paper.getHeight());
我认为* 2 很老套。更合乎逻辑的解决方案是通过更大的维度。但要注意,如果你弄乱了方向,它可能会搞砸。
double biggerDimension = Math.max(paper.getWidth(), paper.getHeight());
paper.setImageableArea(0, 0, biggerDimension, biggerDimension).