Java iText5 PDF内容在页脚上被覆盖

Java iText5 PDF内容在页脚上被覆盖,java,itext,Java,Itext,我正在使用iText5和Java来创建pdf和文档 document = new Document(new Rectangle(1150f, 1150f)); 我的pdf内容在页脚(即图像)上被覆盖 页脚代码: public void onEndPage(PdfWriter writer, Document document) { document.newPage(); try { ColumnText.sh

我正在使用iText5和Java来创建pdf和文档

document = new Document(new Rectangle(1150f, 1150f));
我的pdf内容在页脚(即图像)上被覆盖

页脚代码:

public void onEndPage(PdfWriter writer, Document document) {    
        document.newPage();
        try {           
            ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase(String.format("Page %d", writer.getPageNumber())), (document.left() + document.right())/2,document.bottom()-18,0);            
            Image image = Image.getInstance(PdfHeaderFooter.class.getResource("/static/images/SampleFooter.png"));
            image.scaleAbsolute(1100f, 75f);// image width,height
            image.setAbsolutePosition(30, 40);
            document.add(image);                           
        }
        catch(DocumentException de) {
            throw new ExceptionConverter(de);
        } catch (MalformedURLException e) { 
            logger.error(ExceptionUtils.getStackTrace(e));  
        } catch (IOException e) {
            logger.error(ExceptionUtils.getStackTrace(e));  
        }
    }
此外,一些搜索建议。设置边距,但我无法找到设置边距或任何其他解决方案的确切位置


请帮助,当内容超出pdf区域且未在页脚图像上重叠时,我应该如何创建新页面。

您的代码中存在多个问题

onedpage()期间的
newPage()
页面更改期间调用事件回调
onEndPage()
;因此,在该方法中调用
document.newPage()
可能是危险的,至少是毫无意义的

文档。在
onedpage()期间添加

正如iText的文档以及stackoverflow的答案和评论中经常提到的,您不应在
onedpage()期间使用
document.add

您可以绘制到直接内容(
PdfWriter.getDirectContent()
)或背景内容(
PdfWriter.getDirectContentUnder()

协调 您可以使用以下方法创建
文档

document = new Document(new Rectangle(1150f, 1150f));
此构造函数应用36个单位的默认边距:

public Document(Rectangle pageSize) {
    this(pageSize, 36, 36, 36, 36);
}
因此,您的内容将以36 现在像这样添加图像

image.scaleAbsolute(1100f, 75f);// image width,height
image.setAbsolutePosition(30, 40);
图像位置是图像的左下角。因此,您打算在30
因此,图像显然将重叠部分内容。要么向下移动图像,要么使用具有足够大底部边距的显式边距。

代码中存在多个问题

onedpage()期间的
newPage()
页面更改期间调用事件回调
onEndPage()
;因此,在该方法中调用
document.newPage()
可能是危险的,至少是毫无意义的

文档。在
onedpage()期间添加

正如iText的文档以及stackoverflow的答案和评论中经常提到的,您不应在
onedpage()期间使用
document.add

您可以绘制到直接内容(
PdfWriter.getDirectContent()
)或背景内容(
PdfWriter.getDirectContentUnder()

协调 您可以使用以下方法创建
文档

document = new Document(new Rectangle(1150f, 1150f));
此构造函数应用36个单位的默认边距:

public Document(Rectangle pageSize) {
    this(pageSize, 36, 36, 36, 36);
}
因此,您的内容将以36 现在像这样添加图像

image.scaleAbsolute(1100f, 75f);// image width,height
image.setAbsolutePosition(30, 40);
图像位置是图像的左下角。因此,您打算在30
因此,图像显然将重叠部分内容。请将图像向下移动或使用具有足够大底部边距的显式边距。

请接受@mkl的回答,因为他是对的。在阅读代码时,很明显您没有阅读任何文档。你的代码完全错了!请接受@mkl的回答,因为他是对的。在阅读代码时,很明显您没有阅读任何文档。你的代码完全错了!非常感谢。你是对的,实际上在页面末尾添加新页面是没有用的,而且是错误添加的。我会按照你的建议调整坐标。非常感谢你。你是对的,实际上在页面末尾添加新页面是没有用的,它是错误添加的。我会按照你的建议调整坐标。