jodconverter純文字檔案轉為pdf時中文問題解決方案
阿新 • • 發佈:2019-02-02
jodconverter轉換ms檔案都沒有出現中文問題,但是在轉換最簡單的純文字檔案時卻出現中文問題。我開始時找了cpdetecter來探測純文字檔案的編碼格式,但是對一些檔案的編碼格式還是探測不對,所以想通過它探測到文字檔案的編碼格式,再將它轉為UTF-8的方式來實現文字的統一編碼方式(演示程式碼見下面)是行不通的:
Java程式碼 import java.io.FileInputStream;- import java.io.FileOutputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- publicclass changeCharacterFormat {
- publicstaticvoid main(String[] args) throws Exception{
- InputStreamReader in = new InputStreamReader(
- new FileInputStream("D:\\test\\File\\新建 文字文件 (2).txt"),"GB2312");//按原檔案的編碼方式進行讀取檔案資訊
- OutputStreamWriter out = new OutputStreamWriter(
- new FileOutputStream(
- char[] cbuf = newchar[1024];
- int n;
- while((n=in.read(cbuf))!=-1){
- out.write(cbuf, 0, n);
- }
- in.close();
- out.close();
- }
- }
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class changeCharacterFormat { public static void main(String[] args) throws Exception{ InputStreamReader in = new InputStreamReader( new FileInputStream("D:\\test\\File\\新建 文字文件 (2).txt"),"GB2312");//按原檔案的編碼方式進行讀取檔案資訊 OutputStreamWriter out = new OutputStreamWriter( new FileOutputStream("D:\\test\\File\\新建 文字文件 (2)8.txt"),"utf-8");//轉換為自己想要的編碼格 char[] cbuf = new char[1024]; int n; while((n=in.read(cbuf))!=-1){ out.write(cbuf, 0, n); } in.close(); out.close(); } }
如是就試著將純文字檔案(如*.java,*.c,*.log,*.xml,*.mxml,*.jsp,*asp,*.js等等)的字尾改為.txt再打由openoffice列印成pdf,它是可以列印,但是對於有中文的檔案,它就會出現亂碼。後來我將它們改為*.odt的字尾後就可以正確地列印成pdf,顯示出正常的中文。這裡其實是這樣的,我將它們改為.odt字尾後,那麼再用jodconverter來列印時,它就會呼叫openoffice來列印,那麼就相當於它用openoffice開啟它的odt格式的檔案,再點選列印成pdf;因為它對*.odt檔案支援中文,所以它開啟它時,中文是正確的,其實它在讀這個非odt的純文字檔案時,它就能識別出它的編碼格式,所以就不用我們再去找那個原檔案的編碼格式,再進行轉換,我們可以直接列印。所以關鍵還是理解jodconverter的列印原理,它不過是對openoffice的列印介面的呼叫,所以我們若將如*.jsp等文字改字尾名為*.txt,因為*.txt不是由openoffice直接產生的文字格式,所以對它的支援力度就沒有將這些檔案改字尾名為*.odt的好,因此將其它非odt的純文字檔案改名為odt文字檔案時,它打印出pdf時能正確顯示中文,而改名為txt字尾時,出現亂碼的主要原因。