iText 5.5.x - Java - 分页符

时间:2015-06-03 18:33:32

标签: java itext

如何使用Java iText 5.5.x使用页面上的y位置向文档添加分页符?我已经重写了Div类以使用自定义HTML标记,该标记表示要保留在一起的内容(因为一致性列表[http://demo.itextsupport.com/xmlworker/itextdoc/CSS-conformance-list.htm]表示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);
  }}

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();

0 个答案:

没有答案