Java IText PDF 5-计算页面底部的剩余面积

Java IText PDF 5-计算页面底部的剩余面积,java,pdf,itext,Java,Pdf,Itext,鉴于以下内容: 如您所见,标题当前位于第4页,内容位于第5页 我在这个文档中有大约25个部分,有没有一种方法可以让页面上的区域保留下来,以评估我的标题和一些内容是否能够适合它 如果我可以评估这一点,我可以使用document()将我的内容推送到另一个页面。newPage()您可以使用PdfPageEvent 以下是一个示例: import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; import java.io.*; public

鉴于以下内容:

如您所见,标题当前位于第4页,内容位于第5页

我在这个文档中有大约25个部分,有没有一种方法可以让页面上的区域保留下来,以评估我的标题和一些内容是否能够适合它


如果我可以评估这一点,我可以使用
document()将我的内容推送到另一个页面。newPage()
您可以使用
PdfPageEvent

以下是一个示例:

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import java.io.*;

public class App {

    public static void main(String[] args) throws FileNotFoundException, DocumentException {
        Document document = new Document(PageSize.A6, 20, 20, 20, 20);
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("/tmp/out.pdf"));
        writer.setPageEvent(new PdfListener());
        document.open();
        for (int i = 0; i < 10; i++) {
            Paragraph paragraph = new Paragraph();
            paragraph.add(new Phrase("The chapter "+i));
            Chapter chapter = new Chapter(paragraph, 1);
            Section section1 = chapter.addSection("The section "+i+".1", 2);
            Section section2 = chapter.addSection("The section "+i+".2", 2);
            document.add(chapter);
            document.add(section1);
            document.add(section2);
        }
        document.close();
    }

    public static class PdfListener implements PdfPageEvent {

        public void onChapter(PdfWriter writer, Document dcmnt, float f, Paragraph prgrph) {
            if( f < 50.0f ){
                dcmnt.newPage();
            }
        }
        public void onChapterEnd(PdfWriter writer, Document dcmnt, float f) {}
        public void onSection(PdfWriter writer, Document dcmnt, float f, int i, Paragraph prgrph) {
            if( f < 50.0f ){
                dcmnt.newPage();
            }
        }
        public void onSectionEnd(PdfWriter writer, Document dcmnt, float f) {}
        public void onOpenDocument(PdfWriter writer, Document dcmnt) {}
        public void onStartPage(PdfWriter writer, Document dcmnt) {}
        public void onEndPage(PdfWriter writer, Document dcmnt) {}
        public void onCloseDocument(PdfWriter writer, Document dcmnt) {}
        public void onParagraph(PdfWriter writer, Document dcmnt, float f) {}
        public void onParagraphEnd(PdfWriter writer, Document dcmnt, float f) {}        
        public void onGenericTag(PdfWriter writer, Document dcmnt, Rectangle rctngl, String string) {}

    }
}
import com.itextpdf.text.*;
导入com.itextpdf.text.pdf.*;
导入java.io.*;
公共类应用程序{
公共静态void main(字符串[]args)抛出FileNotFoundException、DocumentException{
文件=新文件(PageSize.A6,20,20,20,20);
PdfWriter writer=PdfWriter.getInstance(文档,新文件输出流(“/tmp/out.pdf”);
writer.setPageEvent(新的PdfListener());
document.open();
对于(int i=0;i<10;i++){
段落=新段落();
添加(新短语(“第“+i章”);
第章=新的一章(第1款);
第1节=第.addSection章(“第“+i+”.1、2节”);
第2节=第.addSection章(“第“+i+”.2节),第2节);
文件.增补(第章);
文件.增补(第1节);
文件.增补(第2节);
}
document.close();
}
公共静态类PdfListener实现PdfPageEvent{
第1章公共无效(PDF编写人、文件dcmnt、浮动f、段落prgrph){
如果(f<50.0f){
dcmnt.newPage();
}
}
公共void onChapterEnd(PdfWriter writer,Document dcmnt,float f){}
公共无效部分(PDF编写者、文件dcmnt、浮动f、int i、段落prgrph){
如果(f<50.0f){
dcmnt.newPage();
}
}
公共void onSectionEnd(PDFWWriter编写器、文档dcmnt、浮点f){}
公开作废待处理文档(PDF编写者,文档dcmnt){}
开始页上的公共无效(PdfWriter writer,文档dcmnt){}
公共无效onEndPage(PDFWWriter编写器,文档dcmnt){}
公共无效onCloseDocument(PDFWWriter编写器,文档dcmnt){}
公共无效段落(PDF编写者、文档dcmnt、浮点f){}
段落结束时的公共无效(PDF编写器、文档dcmnt、浮点f){}
public void onGenericTag(PDFWWriter编写器,文档dcmnt,矩形rctngl,字符串){}
}
}

点(0/0)位于左下角-不在页面开头

您可以使用
PdfPageEvent

以下是一个示例:

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import java.io.*;

public class App {

    public static void main(String[] args) throws FileNotFoundException, DocumentException {
        Document document = new Document(PageSize.A6, 20, 20, 20, 20);
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("/tmp/out.pdf"));
        writer.setPageEvent(new PdfListener());
        document.open();
        for (int i = 0; i < 10; i++) {
            Paragraph paragraph = new Paragraph();
            paragraph.add(new Phrase("The chapter "+i));
            Chapter chapter = new Chapter(paragraph, 1);
            Section section1 = chapter.addSection("The section "+i+".1", 2);
            Section section2 = chapter.addSection("The section "+i+".2", 2);
            document.add(chapter);
            document.add(section1);
            document.add(section2);
        }
        document.close();
    }

    public static class PdfListener implements PdfPageEvent {

        public void onChapter(PdfWriter writer, Document dcmnt, float f, Paragraph prgrph) {
            if( f < 50.0f ){
                dcmnt.newPage();
            }
        }
        public void onChapterEnd(PdfWriter writer, Document dcmnt, float f) {}
        public void onSection(PdfWriter writer, Document dcmnt, float f, int i, Paragraph prgrph) {
            if( f < 50.0f ){
                dcmnt.newPage();
            }
        }
        public void onSectionEnd(PdfWriter writer, Document dcmnt, float f) {}
        public void onOpenDocument(PdfWriter writer, Document dcmnt) {}
        public void onStartPage(PdfWriter writer, Document dcmnt) {}
        public void onEndPage(PdfWriter writer, Document dcmnt) {}
        public void onCloseDocument(PdfWriter writer, Document dcmnt) {}
        public void onParagraph(PdfWriter writer, Document dcmnt, float f) {}
        public void onParagraphEnd(PdfWriter writer, Document dcmnt, float f) {}        
        public void onGenericTag(PdfWriter writer, Document dcmnt, Rectangle rctngl, String string) {}

    }
}
import com.itextpdf.text.*;
导入com.itextpdf.text.pdf.*;
导入java.io.*;
公共类应用程序{
公共静态void main(字符串[]args)抛出FileNotFoundException、DocumentException{
文件=新文件(PageSize.A6,20,20,20,20);
PdfWriter writer=PdfWriter.getInstance(文档,新文件输出流(“/tmp/out.pdf”);
writer.setPageEvent(新的PdfListener());
document.open();
对于(int i=0;i<10;i++){
段落=新段落();
添加(新短语(“第“+i章”);
第章=新的一章(第1款);
第1节=第.addSection章(“第“+i+”.1、2节”);
第2节=第.addSection章(“第“+i+”.2节),第2节);
文件.增补(第章);
文件.增补(第1节);
文件.增补(第2节);
}
document.close();
}
公共静态类PdfListener实现PdfPageEvent{
第1章公共无效(PDF编写人、文件dcmnt、浮动f、段落prgrph){
如果(f<50.0f){
dcmnt.newPage();
}
}
公共void onChapterEnd(PdfWriter writer,Document dcmnt,float f){}
公共无效部分(PDF编写者、文件dcmnt、浮动f、int i、段落prgrph){
如果(f<50.0f){
dcmnt.newPage();
}
}
公共void onSectionEnd(PDFWWriter编写器、文档dcmnt、浮点f){}
公开作废待处理文档(PDF编写者,文档dcmnt){}
开始页上的公共无效(PdfWriter writer,文档dcmnt){}
公共无效onEndPage(PDFWWriter编写器,文档dcmnt){}
公共无效onCloseDocument(PDFWWriter编写器,文档dcmnt){}
公共无效段落(PDF编写者、文档dcmnt、浮点f){}
段落结束时的公共无效(PDF编写器、文档dcmnt、浮点f){}
public void onGenericTag(PDFWWriter编写器,文档dcmnt,矩形rctngl,字符串){}
}
}
点(0/0)位于左下角-不在页面开头