1. 程式人生 > >jodconverter純文字檔案轉為pdf時中文問題解決方案

jodconverter純文字檔案轉為pdf時中文問題解決方案

jodconverter轉換ms檔案都沒有出現中文問題,但是在轉換最簡單的純文字檔案時卻出現中文問題。我開始時找了cpdetecter來探測純文字檔案的編碼格式,但是對一些檔案的編碼格式還是探測不對,所以想通過它探測到文字檔案的編碼格式,再將它轉為UTF-8的方式來實現文字的統一編碼方式(演示程式碼見下面)是行不通的:

Java程式碼 import java.io.FileInputStream;   
  1. import java.io.FileOutputStream;   
  2. import java.io.InputStreamReader;   
  3. import java.io.OutputStreamWriter;   
  4. publicclass changeCharacterFormat {   
  5. publicstaticvoid main(String[] args) throws Exception{   
  6.         InputStreamReader in = new InputStreamReader(   
  7. new FileInputStream("D:\\test\\File\\新建 文字文件 (2).txt"),"GB2312");//按原檔案的編碼方式進行讀取檔案資訊
  8.         OutputStreamWriter out = new OutputStreamWriter(   
  9. new FileOutputStream(
    "D:\\test\\File\\新建 文字文件 (2)8.txt"),"utf-8");//轉換為自己想要的編碼格
  10. char[] cbuf = newchar[1024];   
  11. int n;   
  12. while((n=in.read(cbuf))!=-1){   
  13.             out.write(cbuf, 0, n);   
  14.         }   
  15.         in.close();   
  16.         out.close();   
  17.     }   
  18. }  
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字尾時,出現亂碼的主要原因。