2016-08-16 139 views
0

我想將我的html文本轉換爲帶有一些新字體的itext elementList。 我不想使用parseXhtml函數,因爲我需要單獨爲我的表的每個單元格的PDF文本。 有什麼辦法可以使用我的ttf字體文件,同時從html轉換爲itext elementlist。使用 林:XMLworkerHelper在將html文本轉換爲itext時使用新字體elementList

ElementList el1 = XMLWorkerHelper.parseToElementList(chunk1Text, CSS); 

到我的HTML文本轉換爲iText的元素列表,但如果我指定一個像 「宋體」在我的HTML字體它doesen't渲染字體,但默認爲「宋體」如何使用該字體? 正如我前面提到的,我只想從htmltext中獲取itext元素列表,而不是轉換後的pdf。

+0

我想我已經在這裏有相同的考慮:http://stackoverflow.com/questions/30712551/how-to-create-a-pdf-with-itextxmlworker-from-servlet-using-custom-font – Dfaure

回答

1

請查看我對特定字體處理的評論。

考慮到PDF文件生成本身,我已經習慣了建立自己的PDF表格,並填寫其細胞類似下面的htmlContextcssResolver被定義爲可重複使用的類屬性:

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)); 
     } 
    } 
}