更改保证金顶部iText PDFdinamically

时间:2016-11-23 16:58:29

标签: java html itext

我已经制作了一个解决方案(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考虑更改第二页的上边距?

0 个答案:

没有答案