JodConverter纯文本文件转PDF乱码问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rui574081323/article/details/20454923

最近在做公司项目的时候遇到一个JodConverter转txt文件到pdf文件乱码的问题。纠结了很长时间。

后来,项目经理发现了jodconverter提供的一个tomcat版本的web应用,使用它转出的pdf文件并没有出现乱码的情况。

这个web应用的名称是jodconverter-tomcat-2.2.1,而公司项目中使用的jodconverter是3.0.4版本的。于是,果断对其进行反编译,查看源码,终于发现了什么。

jodconverter对文件格式有自己的一套定义。在2.2.1版本中,没有封装成一个类,而是需要以配置文件的形式读取,再进行判断。

3.0.4版本中,包含了一个DefaultDocumentFormatRegistry.class,这个类里面定义了jodconverter支持的文件格式,以及在进行文件格式转换时进行设置。

其构造函数内包含了对TEXT文本的定义:

	DocumentFormat txt = new DocumentFormat("Plain Text", "txt", "text/plain");
	txt.setInputFamily(DocumentFamily.TEXT);
	Map<String,Object> txtLoadAndStoreProperties = new LinkedHashMap<String,Object>();
	txtLoadAndStoreProperties.put("FilterName", "Text (encoded)");
	txtLoadAndStoreProperties.put("FilterOptions", "utf8");//关键的就在这了
	txt.setLoadProperties(txtLoadAndStoreProperties);
	txt.setStoreProperties(DocumentFamily.TEXT, txtLoadAndStoreProperties);
	addFormat(txt);

我们可以看到有一行代码里面有FilterOptions,设置为utf8。这里的意思应该是只对UTF-8格式的文本文件进行转换,而非utf-8格式的文本文件直接交给OpenOffice去转,其原理就是调用OpenOffice的打印功能,将txt文件打印成pdf格式。OpenOffice本身不能正确识别非UTF-8格式的txt文件,因此就会出现乱码问题。

于是,我把设置utf8的代码注释掉,并重新将该class文件封装进jar包,测试后发现,乱码问题解决了。

命令行: jar uvf jodconverter-core-3.0-beta-4.jar org/artofsolving/jodconverter/document/DefaultDocumentFormatRegistry.class

猜你喜欢

转载自blog.csdn.net/rui574081323/article/details/20454923
今日推荐