2016-08-16 87 views
3

我試圖在HTML中轉換PDF文件中的UTF-8字符(,,Ğ等)。我已閱讀了許多Q & A並編寫了下面的代碼。它在我的本地機器(Windows)中工作,但在測試服務器(Ubuntu)中不起作用。字體不在測試服務器中使用,某些字符丟失。問題是什麼?當使用itext將html轉換爲pdf時,自定義字體適用於Windows,但不適用於Ubuntu。

我的html文件使用的是在windows和ubuntu中不存在的字體。

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <style> 
     * { font-family:'Hickory Jack'; } 
    </style> 
</head> 

Java方法:它需要htmlText並返回pdf文件的字節。

public static byte[] convertHtmlToPdf(String htmlText) throws Exception{   
     String fontPath = PdfConverter.class.getResource("/fonts/").getPath(); 
     XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(fontPath, null); 
     FontFactory.setFontImp(fontImp); 


     ByteArrayOutputStream output = new ByteArrayOutputStream(); 
     InputStream is = new ByteArrayInputStream(htmlText.getBytes("UTF-8")); 


     Document document = new Document(); 
     PdfWriter writer = PdfWriter.getInstance(document, output); 
     document.open(); 


     XMLWorkerHelper xmlWorkerHelper = XMLWorkerHelper.getInstance();   
     xmlWorkerHelper.parseXHtml(writer, document, is, Charset.forName("UTF-8"),fontImp); 

     document.close(); 

     byte[] bytes = output.toByteArray(); 
     output.close();  

     return bytes; 
    } 
+0

你的測試服務器有什麼問題? –

+0

生成的pdf文件中缺少一些字符,並且不使用該字體。 –

回答

1

問題實際上是一個路徑問題。資源文件的完整路徑作爲字體路徑無效。我像這樣改變了字體提供者部分,它可以工作。

XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); 
    fontImp.register("/fonts/Hickory-Jack.ttf"); 
    fontImp.setUseUnicode(true); 

    FontFactory.setFontImp(fontImp); 
相關問題