【问题标题】:Put the contents of pdf at the center of canvas in Apache PDFBox将 pdf 的内容放在 Apache PDFBox 的画布中心
【发布时间】:2017-12-19 08:47:40
【问题描述】:

我正在使用 Apache PDFBox 2.0.8。我的目标是将 PDF 转换为图像并放大画布并将内容放在中心,以便我可以在剩余空间中放置一些页眉和页脚。 我的问题是画布变大了,但内容没有居中,它们粘在底部。

public class PDFRescale {

public static void main(String[] args) {
    try {
    String pdfFilename = "/MuhimbiPOC/Templates/Source_doc_withheaderfooter.pdf";
    PDDocument document = PDDocument.load(new File(pdfFilename));
    PDFRenderer pdfRenderer = new PDFRenderer(document);
    PDPage pge = new PDPage();
    PDFRescale ps = new PDFRescale();


    int pageCounter = 0;
    for (PDPage page : document.getPages())
    {
        final PDRectangle mediaBox = pge.getMediaBox();
        mediaBox.setUpperRightX((float) (mediaBox.getUpperRightX()));
        mediaBox.setUpperRightY((float) (mediaBox.getUpperRightY() * 1.5));
        mediaBox.setLowerLeftY((float) (mediaBox.getLowerLeftY() * 1.5));

        // note that the page number parameter is zero based
        page.setMediaBox(mediaBox);
        BufferedImage bim = pdfRenderer.renderImageWithDPI(pageCounter, 140, ImageType.RGB);

        // suffix in filename will be used as the file format

            ImageIOUtil.writeImage(bim, pdfFilename + "-" + (pageCounter++) + ".png", 140);

    }
    System.out.println("Task Completed ... ");
    document.close();

    }
    catch (IOException e) {
       e.printStackTrace();
    }
}

【问题讨论】:

  • 有没有办法重新缩放PDF而不将其转换为图像。 ?

标签: java apache pdfbox


【解决方案1】:

我的问题是画布变大了,但内容没有居中,它们粘在底部。

对于 mediaBox.getLowerLeftY()0 的 PDF 页面,这是您的问题。虽然这很常见,但不是必需的。如果您使用过更通用的 PDF 选择,您会发现 您的问题是以前的内容最终可以在任何地方,甚至在屏幕外!

原因是你这样做了

mediaBox.setUpperRightY((float) (mediaBox.getUpperRightY() * 1.5));
mediaBox.setLowerLeftY((float) (mediaBox.getLowerLeftY() * 1.5));

这仅在原点位于屏幕中间水平轴上的某个位置时才有效。

改为使用类似的东西

mediaBox.setUpperRightY(mediaBox.getUpperRightY() + mediaBox.getHeight() * 0.5f);
mediaBox.setLowerLeftY(mediaBox.getLowerLeftY() - mediaBox.getHeight() * 0.5f);

您的代码的另一个问题:您只设置了 MediaBox 而忽略了 CropBox。另一方面,pdfRenderer.renderImageWithDPI 使用 CropBox。仅对于没有明确 CropBox 的 PDF 页面,您的代码会扩大页面区域。对于通用解决方案,您还应该调整 CropBox

【讨论】:

  • 有没有办法重新缩放PDF而不将其转换为图像。 ?
  • @PrashantChaudhary “有没有办法在不将其转换为图像的情况下重新缩放PDF?” - 是的:您可以在内容流的开头插入缩放指令(数组)的每一页。注意:这只会更改页面内容,不会更改注释。如果您的 PDF 也有注释(如 AcroForm 表单域),您也必须缩放它们的 Rect 条目。
猜你喜欢
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
相关资源
最近更新 更多