是否可以在IText中更改已解析的HTML的字体?

时间:2019-01-23 10:46:59

标签: java pdf ckeditor itext

首先让我介绍一下此问题的背景:

我正在使用CKEditor来实现项目中的一些RTF文本字段,该编辑器是通过javascript包含的,并处理这些字段以创建由浏览器正确呈现的HTML。

挑战在于将编辑器生成的表包含在PDF上,我已经尝试过使用Jasper Reports,但是它不能很好地工作(解析的HTML无法呈现表和CKEditor生成的某些样式)。

我已经测试了IText,并且效果很好,我可以通过以下代码解析表和几乎所有CKEditor样式:

CSSResolver cssResolver = new StyleAttrCSSResolver();
CssFile cssFile = XMLWorkerHelper.getCSS(new FileInputStream(new File(CKEDITOR_CSS_FILE));
cssResolver.addCss(cssFile);

HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());

PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);

XMLWorker worker = new XMLWorker(css, true);
htmlParser = new XMLParser(worker);

// Parsing the HTML generated by the editor
htmlParser.parse(new FileInputStream(HTML));

它在解析过程中会正确考虑CSS,并向我输出下表:

enter image description here

我的问题是:是否可以将解析后的HTML的字体更改为使用较小的字体或粗体字体?

我将有很多字段需要包含在PDF中,每个字段将位于不同的部分,要求使用不同的格式。我找不到在XMLWorker上允许此自定义的任何界面。

1 个答案:

答案 0 :(得分:0)

我改变了方法,放弃了将CKEditor CSS合并到我的报告中的想法。

相反,我为CKEditor生成的HTML自定义了自己的CSS,最后我有了以下结构:

  1. 我的报告的自定义CSS,其中包含所有配置和格式:

* {
  font-size: 13px;
  line-height: 20px;
}

table {
  border-collapse: collapse;
  width: 100%;
}

th, td {
  padding: 6px; 
}

table, th, td {
  border: 1px solid black;
}

th {
  font-weight: bold;
}

结果是此表:

enter image description here