我正在使用pdf-renderer库来打印已生成的pdf文件。此pdf文件已创建,需要按原样打印,以适合某些预先打印的A4纸。问题是需要在最顶部打印一些信息,我无法将其打印到最顶层。我按照本指南http://lynema.org/2010/12/29/printing-a-pdf-in-java-with-pdfrenderer来设置页面大小,但没有关于页边距的线索。有没有办法设置页边距,以便按原样打印PDF页面? 提前谢谢
答案 0 :(得分:1)
理论上,您可以通过调用setImageableArea
对象上的Paper
来使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的答案,他建议将其翻倍{ {1}}宽度:
setImageableArea
我认为paper.setImageableArea(0, 0, paper.getWidth() * 2, paper.getHeight());
很丑陋。更合理的解决方案是通过更大的尺寸。但要注意,如果你搞砸了这个方向,它可能会疯狂。
* 2