【问题标题】:Setting up page margins on pdf-renderer (java)在 pdf-renderer (java) 上设置页边距
【发布时间】:2014-05-13 09:19:54
【问题描述】:

我正在使用 pdf-renderer 库来打印已经生成的 pdf 文件。此 pdf 文件已创建,需要按原样打印,以适合某种预先打印的 A4 纸。问题是一些信息需要打印在最顶部,我不能让它打印在顶部。我正在按照本指南http://lynema.org/2010/12/29/printing-a-pdf-in-java-with-pdfrenderer 设置页面大小,但不知道页边距。有没有办法设置页边距以便按原样打印 pdf 页面? 提前谢谢你

【问题讨论】:

    标签: java pdf printing


    【解决方案1】:

    理论上,您可以通过在 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).
    

    【讨论】:

      猜你喜欢
      • 2017-03-28
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 2014-08-07
      • 2014-11-17
      • 1970-01-01
      • 2020-04-14
      相关资源
      最近更新 更多