【问题标题】:How to extend the page size of existing PDF to add a footer in iText如何扩展现有 PDF 的页面大小以在 iText 中添加页脚
【发布时间】:2018-09-30 12:00:51
【问题描述】:

我需要以页脚的形式添加内容,其中段落居中于现有 PDF 文件的所有页面。 我已经关注了之前的answer,但该解决方案并不能解决我的问题。尽管代码有效,但我的 PDF 没有足够的下边距来容纳页脚,因此文本位于内容之上。

在添加页脚之前我需要做的是在底部添加一些额外的边距(有效地扩展页面大小)。与question 中所做的类似,但只是我需要在底部添加额外的边距。

我也尝试了this,但没有成功。我正在尝试自己弄清楚,但到目前为止还没有运气。

【问题讨论】:

  • 为什么this 不起作用?
  • 请阅读why "doesn't work" is not a problem description that a developer should give 并相应地调整您的问题。 对于我们的问题以当前形式可以给出的唯一可能的答案“它对我们有用!”另外:为什么你还在使用旧的 iText 版本;升级到 iText 7!!!
  • 它不起作用,因为我的 PDF 有其他类型的框。直到现在才意识到。谢谢您的帮助。你们俩。

标签: java pdf itext


【解决方案1】:

如果您知道如何在侧面添加额外空间,如以下问题所述:How to extend the page size of a PDF to add a watermark?,那么您也应该知道如何在底部添加额外空间。你的问题是重复的。

PDF 文档的页面大小使用/MediaBox 定义。可以使用/CropBox 对其进行裁剪。在我给出的答案中,我们将/MediaBox 更改为:

PdfArray mediabox = pageDict.getAsArray(PdfName.MEDIABOX);
llx = mediabox.getAsNumber(0).floatValue();
mediabox.set(0, new PdfNumber(llx - 36));

llx 的值是左下角 X 坐标的坐标,减去半英寸(36 个用户单位)。

如果你想改变下边框,你必须改变左下Y坐标:

PdfArray mediabox = pageDict.getAsArray(PdfName.MEDIABOX);
lly = mediabox.getAsNumber(1).floatValue();
mediabox.set(1, new PdfNumber(llx - 36));

这就是马克在回答问题How do I resize an existing PDF with Coldfusion/iText时所做的事情

当然,如果有裁剪框,​​这不会有任何影响。如果有裁剪框,​​您也需要更改裁剪框的llx 值:

PdfArray cropbox = pageDict.getAsArray(PdfName.CROPBOX);
if (cropbox != null) {
    lly = cropbox.getAsNumber(1).floatValue();
    cropbox.set(1, new PdfNumber(llx - 36));
}

显然,您需要在添加页脚时将更改考虑在内。在我的示例中,底部坐标不再是lly,而是lly - 36

【讨论】:

  • 解决我的问题。谢谢!
  • 提到 CROPBOX 解决了我的问题
猜你喜欢
  • 2015-06-28
  • 1970-01-01
  • 2018-01-30
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 2020-06-27
  • 2013-11-08
相关资源
最近更新 更多