XMLWorkerHelper 在将 HTML 文本转换为 iText ElementList 时使用新字体
XMLWorkerHelper use new font while converting HTML text to iText ElementList
我想用一些新字体将我的 HTML 文本转换为 iText 的 ElementList
。
我不想使用 parseXHtml
函数,因为我需要为 table 的每个单元格分别提供 PDF 文本。
有什么方法可以在从 HTML 转换为 ElementList
.
时使用我的 TTF 字体文件
我正在使用:
ElementList el1 = XMLWorkerHelper.parseToElementList(chunk1Text, CSS);
将我的 HTML 文本转换为 ElementList
但如果我指定字体
"Courier New" 在我的 HTML 中它不呈现该字体但默认为 "Times New Roman"。我该如何使用该字体?
正如我之前提到的,我只希望 ElementList
来自 HTML 文本而不是转换后的 PDF。
请参阅了解具体的字体处理。
考虑到 PDF 文件生成本身,我习惯于构建自己的 PDF table 并使用如下内容填充其单元格,定义 htmlContext
和 cssResolver
作为可重复使用的 class 属性:
private ElementList getElementsFromHtml(final String html) throws IOException {
//...
// Pipelines
final ElementList elements = new ElementList();
final ElementHandlerPipeline end = new ElementHandlerPipeline(elements, null);
final HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, end);
final CssResolverPipeline cssPipeline = new CssResolverPipeline(cssResolver, htmlPipeline);
// XML Worker
final XMLWorker worker = new XMLWorker(cssPipeline, true);
final XMLParser p = new XMLParser(true, worker, htmlContext.charSet());
final String resolvedHtml = "<body>" + html + "</body>";
p.parse(new ByteArrayInputStream(resolvedHtml.getBytes(htmlContext.charSet())), htmlContext.charSet());
return elements;
}
public void addHtml(final PdfPCell cell, final String html) throws IOException {
for (final Element e : getElementsFromHtml(html)) {
if (ColumnText.isAllowedElement(e)) {
cell.addElement(e);
} else {
LOG.error(String.format("### Element not allowed! ###\nElement (type: %d): %s\nContext: %s", e.type(), e.toString(), html));
}
}
}
我想用一些新字体将我的 HTML 文本转换为 iText 的 ElementList
。
我不想使用 parseXHtml
函数,因为我需要为 table 的每个单元格分别提供 PDF 文本。
有什么方法可以在从 HTML 转换为 ElementList
.
我正在使用:
ElementList el1 = XMLWorkerHelper.parseToElementList(chunk1Text, CSS);
将我的 HTML 文本转换为 ElementList
但如果我指定字体
"Courier New" 在我的 HTML 中它不呈现该字体但默认为 "Times New Roman"。我该如何使用该字体?
正如我之前提到的,我只希望 ElementList
来自 HTML 文本而不是转换后的 PDF。
请参阅
考虑到 PDF 文件生成本身,我习惯于构建自己的 PDF table 并使用如下内容填充其单元格,定义 htmlContext
和 cssResolver
作为可重复使用的 class 属性:
private ElementList getElementsFromHtml(final String html) throws IOException {
//...
// Pipelines
final ElementList elements = new ElementList();
final ElementHandlerPipeline end = new ElementHandlerPipeline(elements, null);
final HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, end);
final CssResolverPipeline cssPipeline = new CssResolverPipeline(cssResolver, htmlPipeline);
// XML Worker
final XMLWorker worker = new XMLWorker(cssPipeline, true);
final XMLParser p = new XMLParser(true, worker, htmlContext.charSet());
final String resolvedHtml = "<body>" + html + "</body>";
p.parse(new ByteArrayInputStream(resolvedHtml.getBytes(htmlContext.charSet())), htmlContext.charSet());
return elements;
}
public void addHtml(final PdfPCell cell, final String html) throws IOException {
for (final Element e : getElementsFromHtml(html)) {
if (ColumnText.isAllowedElement(e)) {
cell.addElement(e);
} else {
LOG.error(String.format("### Element not allowed! ###\nElement (type: %d): %s\nContext: %s", e.type(), e.toString(), html));
}
}
}