iText 5.5.x-Java-分页符

iText 5.5.x-Java-分页符,java,itext,Java,Itext,如何使用Java iText 5.5.x在页面上的y位置向文档添加分页符?我已经重写了Div类以使用自定义HTML标记,该标记表示要保存在一起的内容(因为一致性列表[指示HTML中的分页符必须是“始终”)。我似乎无法确定在内容大于我希望的页面大小时如何分页符。PDF生成没有使用“标准”创建PDF的方法,但从解析HTML文件中获取内容 以下是我为Div课程准备的内容: class PageBreak extends Div { private Document document; private

如何使用Java iText 5.5.x在页面上的y位置向文档添加分页符?我已经重写了Div类以使用自定义HTML标记,该标记表示要保存在一起的内容(因为一致性列表[指示HTML中的分页符必须是“始终”)。我似乎无法确定在内容大于我希望的页面大小时如何分页符。PDF生成没有使用“标准”创建PDF的方法,但从解析HTML文件中获取内容

以下是我为Div课程准备的内容:

class PageBreak extends Div {
private Document document;
private PdfWriter writer;
private float breakPoint;
private float signatureArea = 80;

public PageBreak(Document document, PdfWriter writer) {
    this.document = document;
    this.writer = writer;
    this.breakPoint = (document.top() - signatureArea - 40 /*padding*/);
}

@Override
public List<com.itextpdf.text.Element> end(WorkerContext ctx, Tag tag, List<com.itextpdf.text.Element> currentContent) {
    System.out.println("END POS: " + writer.getVerticalPosition(true));
    System.out.println("writer.getVerticalPosition(true) " + writer.getVerticalPosition(true));
    System.out.println("breakPoint: " + breakPoint);

    boolean newPage = writer.getVerticalPosition(true) > breakPoint;

    if(newPage) {
        System.out.println("breaking");
        document.newPage();
    }

    return currentContent;
}

@Override
public List<com.itextpdf.text.Element> start(WorkerContext ctx, Tag tag) {
    System.out.println("START POS: " + writer.getVerticalPosition(true));
    System.out.println("writer.getVerticalPosition(true) " + writer.getVerticalPosition(true));
    System.out.println("breakPoint: " + breakPoint);
    return new ArrayList<com.itextpdf.text.Element>(0);
  }}
class PageBreak扩展了Div{
私人文件;
私人编剧;
私有浮点断点;
私人浮动签名ea=80;
公共分页符(文档、PDF编写器){
本文件=文件;
this.writer=writer;
this.breakPoint=(document.top()-signatureArea-40/*padding*/);
}
@凌驾
公共列表结束(WorkerContext ctx、标记标签、列表内容){
System.out.println(“结束位置:+writer.getVerticalPosition(true));
System.out.println(“writer.getVerticalPosition(true)”+writer.getVerticalPosition(true));
System.out.println(“断点:”+断点);
布尔newPage=writer.getVerticalPosition(true)>断点;
如果(新页){
系统输出打印(“中断”);
document.newPage();
}
返回当前内容;
}
@凌驾
公共列表开始(WorkerContext ctx、标签){
System.out.println(“开始位置:+writer.getVerticalPosition(true));
System.out.println(“writer.getVerticalPosition(true)”+writer.getVerticalPosition(true));
System.out.println(“断点:”+断点);
返回新的ArrayList(0);
}}
HTML的一个示例:

 <pagebreak>
 <table><tr><td class="section-h3">A table</td></tr></table>
 <table>
 <tr>
 <td class="withback-70">Reviewed By</td>
 <td class="withoutback-70">Jim</td>
 </tr>
 </table>
 </pagebreak>

桌子
审核人
吉姆
这是将HTML转换/解析为PDF的代码:

    Document document = new Document();
    PdfWriter writer = PdfWriter.getInstance(document, outputStream);
    writer.setPageEvent(new HeaderFooter(mappedMasterIncident));
    document.setPageSize(PageSize.LETTER);
    document.setMargins(18, 18, 18, 95);
    document.open();

    HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
    //not working
    //TagProcessorFactory factory = Tags.getHtmlTagProcessorFactory();
    //factory.addProcessor(new PageBreak(document, writer), "pagebreak");
    //htmlContext.setTagFactory(factory);
    htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
    htmlContext.setImageProvider(new Base64ImageProvider());

    CSSResolver cssResolver = new StyleAttrCSSResolver();
    cssResolver.addCssFile("file:///C|/Users/jim.willmore/Desktop/pdf.css", true);
    Pipeline<?> pipeline = new CssResolverPipeline(cssResolver,new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));

    XMLWorker worker = new XMLWorker(pipeline, true);
    XMLParser p = new XMLParser( worker);
    p.parse(templateReader);

    document.close();
Document Document=新文档();
PdfWriter writer=PdfWriter.getInstance(文档,outputStream);
writer.setPageEvent(新HeaderFooter(mappedMasterIncident));
document.setPageSize(PageSize.LETTER);
文件。设置页边距(18、18、18、95);
document.open();
HtmlPipelineContext htmlContext=新的HtmlPipelineContext(null);
//不起作用
//TagProcessorFactory=Tags.getHtmlTagProcessorFactory();
//addProcessor(新的分页符(文档、编写器),“分页符”);
//htmlContext.setTagFactory(工厂);
setTagFactory(Tags.getHtmlTagProcessorFactory());
setImageProvider(新的Base64ImageProvider());
CSSResolver CSSResolver=新样式AttrCSSResolver();
cssResolver.addCssFile(“file:///C|/Users/jim.willmore/Desktop/pdf.css”,true);
管道管道=新的cssResolver管道(cssResolver,新的HtmlPipeline(htmlContext,新的PdfWriterPipeline(文档,编写器));
XMLWorker=newxmlworker(管道,true);
XMLParser p=新的XMLParser(worker);
p、 parse(templateReader);
document.close();

没有任何代码很难提供帮助如何使用Java iText 5.5.x在页面上的y位置向文档添加分页符的直截了当的答案是调用
document.newPage()
根据职位而定,但我认为这没有帮助,是吗?我可以发布代码,但它不是我想要的。更重要的是,我可能为自己创造了比我需要的更多的工作。我也尝试过修改页边空白,希望API能找出最好的分页位置,但失败了。主要问题是ea上的页脚ch页面重叠内容。拆分页面,使页脚显示在同一位置,而不是重叠内容,这是一件麻烦事。页脚显示在同一位置,而不是重叠内容,这是一件麻烦事-这通常很琐碎,只是为页脚在页边空白区域选择坐标的问题。mkl-感谢您提供的信息在上。我似乎未正确设置页面的页边距。我在document.open()之后设置页边距,而不是在document.open()方法调用之前。页脚现在按预期显示;没有重叠内容。我仍然无法控制分页符。有人有什么见解吗?