我試圖將PDF格式的阿拉伯字符轉換爲圖像以便在網頁上使用縮略圖。 PDFrenderer
,PDFBox
都不能在轉換後保留阿拉伯字符,我只使用JMagick
獲得滿意的結果,但問題在於它使用了dll
和其他一些我無權添加到我的應用程序安裝程序的依賴項。將阿拉伯文PDF轉換爲圖像而不會丟失數據
有沒有更好的開源解決方案我可能錯過了,最糟糕的情況是哪裏最好的應付方案?
感謝
這裏是我的PDF模擬文件:
我試圖將PDF格式的阿拉伯字符轉換爲圖像以便在網頁上使用縮略圖。 PDFrenderer
,PDFBox
都不能在轉換後保留阿拉伯字符,我只使用JMagick
獲得滿意的結果,但問題在於它使用了dll
和其他一些我無權添加到我的應用程序安裝程序的依賴項。將阿拉伯文PDF轉換爲圖像而不會丟失數據
有沒有更好的開源解決方案我可能錯過了,最糟糕的情況是哪裏最好的應付方案?
感謝
這裏是我的PDF模擬文件:
(我張貼此作爲一個答案,因爲它太長的評論,即使它僅僅是給定樣本的分析PDF)
當PDFBox試圖呈現您的示例PDF時,實際上至少有兩個問題。
對於所有拉丁字母和所有數字,原始字體被替換爲默認字體。參看日誌輸出是這樣的:
23.05.2013 09:15:48 org.apache.pdfbox.pdmodel.font.PDSimpleFont drawString
WARNUNG: Changing font on <H> from <Arial> to the default font
這是由於PDFBox的渲染文本的方式結合嵌入式字體的可用信息非常有限。
PDFBox利用JRE的文本呈現功能,需要先將文本信息轉換爲Unicode,然後呈現這些Unicode字符。不過,嵌入字體不包含任何編碼或映射信息。
轉換爲Unicode意外成功,因爲PDFBox使用簡單地假定一些默認編碼的後備。但是,渲染失敗,因爲JRE代碼沒有任何關於哪個Unicode字符使用哪個字形的信息。
對於所有的阿拉伯文字,嵌入字體無法讀取,因此,Arial字體來代替:
23.05.2013 09:15:48 org.apache.pdfbox.pdmodel.font.PDCIDFontType2Font getawtFont
INFO: Can't read the embedded font HYMDAA+ArialMT-Identity-H
23.05.2013 09:15:58 org.apache.pdfbox.pdmodel.font.PDType0Font getawtFont
INFO: Using font Arial instead of HYMDAA+ArialMT-Identity-H
這裏已經解析嵌入字體失敗。內部的Exception
由JRE代碼拋出:
java.awt.FontFormatException: Font name not found
at sun.font.TrueTypeFont.init(TrueTypeFont.java:527)
at sun.font.TrueTypeFont.<init>(TrueTypeFont.java:162)
at sun.font.FontManager.createFont2D(FontManager.java:2474)
at java.awt.Font.<init>(Font.java:570)
at java.awt.Font.createFont(Font.java:896)
at org.apache.pdfbox.pdmodel.font.PDCIDFontType2Font.getawtFont(PDCIDFontType2Font.java:81)
...
我不是關於字體內部非常熟悉,因此,不知道JRE代碼是否有點過度敏感這裏或是否嵌入字體是真的破碎。雖然這似乎很腥。
第1期的樣子PDFBox的的缺點(期待能夠從字形做往返於Unicode和回字形,而不損失是相當幼稚的PDF格式的世界)。因此,其他使用較不天真的方法的渲染器很可能成功地正確顯示受此問題影響的文本。
問題2另一方面可能成爲許多渲染器的障礙。
我會建議嘗試調整PDF創建過程以包含更完整的字體信息。
ABCpdf .NET將執行此類轉換。
它支持所有那些通常不支持的功能,如阿拉伯語,3型字體,漸變色,不尋常的色彩空間,專色和PostScript功能。
這是將您的PDF轉換爲使用ABCpdf .NET的PNG。
我在ABCpdf .NET軟件組件上工作,所以我的回覆可能包含基於ABCpdf的概念。這正是我所知道的。 :-)
他問java的:)。 – Yassering
請提供您使用的樣本PDF文件。也許有一些關於PDF的特性,在轉換成圖像之前應該在預處理步驟中修復它。 – mkl
我加入了我正在使用的pdf文件。 – Genjuro
imagemagick's:convert result.pdf result.png - 在Linux上適用於我(他們有一個windows版本的convert.exe,只是不會與Windows自己的convert.exe混淆)。 –