我已经制作了一个解决方案(JAVA 和 iText)来从页眉和页脚的 html 渲染处理生成 PDF。

我正在使用 iText 5.5.9 和 java 1.7.

用户将能够选择是否应在每个页面上重复标题,这是在用户选择具有标记的 html 模板时发生的,该标记表明它可以或不能重复标题

我遇到的问题是关于页面上内容的最高边缘。

第一页上总会有标题,所以我创建了带有上边距的文档,其中包含我需要的值:

document = new Document(PageSize.A4, 85.35826771653F, 56.90551181102F, 140, 130.90551181102F);
  • 情况 1(没关系)

当 html 有分页符时,我可以将顶部更改为文本以进一步增加:

for (Element e : this.pdfProcessor.parseToElementList(pageHTML, null)) {
   document.add(e);

   if (pageline == 0 && this.modeloTemplateMPF) {
      if (this.headerNoLoop) {
          document.setMargins(85.35826771653F, 56.90551181102F, 60F, 130.90551181102F);
       } else {
          document.setMargins(85.35826771653F, 56.90551181102F, 140F, 130.90551181102F);
    }
  }
}

方法 parseToElementList:

public ElementList parseToElementList(String html, String css) throws Exception {
    ElementList elements = null;

    try {
        // CSS
        CSSResolver cssResolver = new StyleAttrCSSResolver();
        if (css != null) {
            CssFile cssFile = XMLWorkerHelper.getCSS(new ByteArrayInputStream(css.getBytes()));
            cssResolver.addCss(cssFile);
        }

        // HTML
        CssAppliers cssAppliers = new CssAppliersImpl(FontFactory.getFontImp());
        HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
        htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
        htmlContext.setImageProvider(this.base64ImageProvider);

        // Pipelines
        elements = new ElementList();
        ElementHandlerPipeline end = new ElementHandlerPipeline(elements, null);
        HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, end);
        CssResolverPipeline cssPipeline = new CssResolverPipeline(cssResolver, htmlPipeline);

        // XML Worker
        XMLWorker worker = new XMLWorker(cssPipeline, true);
        XMLParser p = new XMLParser(worker);
        p.parse(new ByteArrayInputStream(html.getBytes()));
    } catch (Exception e) {
        throw e;
    }

    return elements;
}
  • 情况 2(没关系)

如果我在每个页面都有标题,我将没有问题。

  • 情况 3(不行)

但是当 html 没有分页符时,iText 本身会执行分页符,但 TOP 边距始终保持与创建文档时定义的相同。在这种情况下,值为 140。

在没有分页符的情况下,如何让 iText 考虑更改第二页的上边距?