我正在嘗試使用包含非拉丁字符的ITextRenderer生成pdf文檔。在我這裏是保加利亞語。使用ITextRenderer從HTML生成pdf文件時的編碼問題
在致電ITextRenderer,我有一個字符串內容一些進程(如與整潔解析)看起來像後(我能看透調試這個值)
斯汀內容:
td class="description">Вид на потока</td>
td class="description">Статус на потока</td>
以上只是我的字符串的一部分。此內容包含有效的html語法。我只是在這裏放一小部分來澄清,直到這部分,我的編碼是正確的,因爲我能夠讀取保加利亞字符。
之後,下面的代碼發生這將創建一個文件,把它放在itextrenderer並生成PDF文件。此代碼已經測試和工作latin字符的內容,因爲我能夠成功地生成英文pdf文件。
問題出現當我切換到另一種語言(保加利亞語)與非拉丁字符。生成的PDF將忽略所有保加利亞字符,最終結果是帶有大量空行的pdf。這是生成的PDF
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
dbf.setNamespaceAware(false);
dbf.setFeature("http://xml.org/sax/features/namespaces", false);
dbf.setFeature("http://xml.org/sax/features/validation", false);
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
DocumentBuilder builder = dbf.newDocumentBuilder();
Document doc = builder.parse(new ByteArrayInputStream(content.getBytes("UTF-8")));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
InputStream is = null;
ITextRenderer renderer = new ITextRenderer();
renderer.getFontResolver().addFont("fonts/TIMES.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("fonts/TIMESBD.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("fonts/TIMESBI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("fonts/TIMESI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.setDocument(doc, null);
renderer.layout();
renderer.createPDF(outputStream);
outputStream.close();
byte[] outputBytes = outputStream.toByteArray();
is = new ByteArrayInputStream(outputBytes);
response.setContentType("application");
response.addHeader("Content-Disposition", "attachment; filename=\"" + "exported.pdf" + "\"");
response.setContentLength(outputBytes.length);
response.getOutputStream().write(inputStreamToBytes(is));
我已經試過幾件事情(主要涉及到編碼),但不幸的是我還沒有找到一個解決辦法代碼的一部分。也許我缺少明顯的東西在這裏:)
我不知道這是否增加任何價值,但是我用的彈簧和該代碼控制器
任何幫助將不勝感激內運行。
Thanx
Thanx的答覆。你認爲這是一個字體問題?我需要特定的字體來顯示非拉丁字符嗎?我很確定我的字體是在正確的位置,但我會試一試,我會讓你知道 – alexandros
你好。我再次檢查它。字體正確加載。我也運行你建議的FontTest。我面臨同樣的問題。我加載支持西里爾字符的字體。然而PDF忽略它們並打印空行。有什麼建議麼? – alexandros
我剛剛添加了一個新的職位,解釋我的問題更詳細http://stackoverflow.com/questions/10250606/generation-of-pdf-from-html-with-non-latin-characters-using-itext-does-not -工作 – alexandros