請查看我對特定字體處理的評論。
考慮到PDF文件生成本身,我已經習慣了建立自己的PDF表格,並填寫其細胞類似下面的htmlContext
和cssResolver
被定義爲可重複使用的類屬性:
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));
}
}
}
我想我已經在這裏有相同的考慮:http://stackoverflow.com/questions/30712551/how-to-create-a-pdf-with-itextxmlworker-from-servlet-using-custom-font – Dfaure