【问题标题】:Apache PDFBox - Unable to reduce the size of the content in PDFApache PDFBox - 无法减小 PDF 中内容的大小
【发布时间】:2018-08-31 19:28:39
【问题描述】:

我正在尝试使用 PDFBox 调整 PDF 的大小,以便稍后为页眉和页脚腾出一些空间。我可以在大多数情况下做到这一点,除非页面很大。

页面宽度和高度 = 3168.0 :: 22023.0 (pts)

我正在使用以下代码:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
    //String pdfFilename = "/MuhimbiPOC/Templates/Source_doc_withheaderfooter.pdf";
    //String pdfFilename = "/MuhimbiPOC/Templates/3.pdf";
    String pdfFilename = "/MuhimbiPOC/Templates/PDFsam_3.pdf";
    PDDocument document = PDDocument.load(new File(pdfFilename));
    PDDocument documentPDF = new PDDocument();
    PDFRenderer pdfRenderer = new PDFRenderer(document);
    PDPage pge = new PDPage();
    int pageCounter = 0;
    for (PDPage page : document.getPages())
    {

        final PDRectangle mediaBox = page.getMediaBox();
        mediaBox.setUpperRightX((float) (page.getMediaBox().getUpperRightX()));
        mediaBox.setUpperRightY(page.getMediaBox().getUpperRightY() + page.getMediaBox().getHeight() * 0.1f);
        mediaBox.setLowerLeftY(page.getMediaBox().getLowerLeftY() - page.getMediaBox().getHeight() * 0.1f); 
        System.out.println("====================================");
        System.out.println((float) (page.getMediaBox().getWidth()) + " :: " + page.getMediaBox().getHeight());
        System.out.println(mediaBox.getWidth() + " :: " + mediaBox.getHeight());
        System.out.println("====================================");
        // note that the page number parameter is zero based
        page.setMediaBox(mediaBox);
    }
    System.out.println("No. of Pages :: " + document.getNumberOfPages());
    document.save(pdfFilename + "_test.pdf");
    System.out.println("Task Completed ... @ " + new Date());
    document.close();


}
 catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
}

这对所有情况都适用,除了我提到的那个。

【问题讨论】:

  • 您只需更改 MediaBox。更重要的是 CropBox(如果没有明确给出,则默认为 MediaBox)。因此,也要更新 CropBox。
  • @mkl 感谢您的提示。效果很好:)
  • 在这种情况下,我会将该评论作为您可以接受的实际答案。

标签: java apache pdf pdfbox


【解决方案1】:

OP 的代码只读取和更新页面的MediaBox。但是 CropBox 对于页面的可见尺寸更为重要。您可以在this answer 的页面上找到可以定义的不同框的枚举和描述。

尽管如此,代码大部分时间仍能正常工作的原因是,如果没有明确给出,CropBox 默认为 MediaBox

因此,应该更新代码以同时更新 MediaBoxCropBox,如果后者也为页面明确给出。

【讨论】:

    猜你喜欢
    • 2020-03-18
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多