我已经制作了一个解决方案(JAVA和iText),用于从页眉和页脚的html渲染处理中生成PDF。
我使用的是iText 5.5.9和java 1.7。
用户将能够选择是否应在每个页面上重复标题,这是在用户时发生的 选择一个html模板,该模板的标签表明它可以或不能重复标题
我遇到的问题是关于页面上内容的上边距。
第一页上总会有标题,所以我创建了带有我需要的值的上边距的文档:
document = new Document(PageSize.A4, 85.35826771653F, 56.90551181102F, 140, 130.90551181102F);
当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;
}
如果我在每个页面都有标题,我就没有问题。
但是当html没有分页符时,iText本身会执行分页符,但TOP边距始终保持与创建文档时定义的相同。在这种情况下,值为140。
在没有分页符的情况下,如何让iText考虑更改第二页的上边距?