问题描述:
使用openoffice将txt文本转pdf的过程中发现中文乱码。
解决思路及过程:
1、查看出现乱码的原因
经查询jodconverter源码发现,只有utf-8编码的文本才不会中文乱码。
2、怎么样将非utf-8编码文件转换成utf-8文件。
要转之前首先要判断txt文本本身的编码。经查发现txt文本有一个头。
判断方法如下
/**
* 根据文件路径返回文件编码
* @param filePath
* @return
* @throws IOException
*/
public static String getCharset(String filePath) throws IOException{
BufferedInputStream bin = new BufferedInputStream(new FileInputStream(
filePath));
int p = (bin.read() << 8) + bin.read();
String code = null;
switch (p) {
case 0xefbb:
code = "UTF-8";
break;
case 0xfffe:
code = "Unicode";
break;
case 0xfeff:
code = "UTF-16";
break;
default:
code = "GB2312";
}
System.out.println(code);
return code;
}
转换代码如下
/**
* 以指定编码方式写文本文件,存在会覆盖
*
* @param file
* 要写入的文件
* @param toCharsetName
* 要转换的编码
* @param content
* 文件内容
* @throws Exception
*/
public static void saveFile2Charset(File file, String toCharsetName,
String content) throws Exception {
if (!Charset.isSupported(toCharsetName)) {
throw new UnsupportedCharsetException(toCharsetName);
}
OutputStream outputStream = new FileOutputStream(file);
OutputStreamWriter outWrite = new OutputStreamWriter(outputStream,
toCharsetName);
outWrite.write(content);
outWrite.close();
}
经测试发现,转换后的文本,获取的头还是gbk的,只有手机将头文件中blob生成
代码如下:
/**
* 以指定编码方式写文本文件,存在会覆盖
*
* @param file
* 要写入的文件
* @param toCharsetName
* 要转换的编码
* @param content
* 文件内容
* @throws Exception
*/
public static void saveFile2Charset(File file, String toCharsetName,
String content) throws Exception {
if (!Charset.isSupported(toCharsetName)) {
throw new UnsupportedCharsetException(toCharsetName);
}
OutputStream outputStream = new FileOutputStream(file);
//增加头文件标识
outputStream.write(new byte[]{(byte)0xEF, (byte)0xBB, (byte)0xBF});
OutputStreamWriter outWrite = new OutputStreamWriter(outputStream,
toCharsetName);
outWrite.write(content);
outWrite.close();
}
经测试
GB2312
Unicode
UTF-16
UTF-8
都成功。
txt编码和头文件说明
java编码与txt编码对应 |
java |
txt |
unicode |
unicode big endian |
utf-8 |
utf-8 |
utf-16 |
unicode |
gb2312 |
ANSI |
什么是BOM
BOM(byte-order mark),即字节顺序标记,它是插入到以UTF-8、UTF16或UTF-32编码Unicode文件开头的特殊标记,用来识别Unicode文件的编码类型。对于UTF-8来说,BOM并不是必须的,因为BOM用来标记多字节编码文件的编码类型和字节顺序(big-endian或little- endian)。
BOMs 文件头:
00 00 FE FF = UTF-32, big-endian
FF FE 00 00 = UTF-32, little-endian
EF BB BF = UTF-8,
FE FF = UTF-16, big-endian
FF FE = UTF-16, little-endian
注:jodconverter 2.2.1不支持docx 、xlsx、ppt、文件转pdf
相关推荐
首先,我们要理解PPT转PDF乱码的根本原因。通常,PPT文件包含多种字体,特别是当一个页面上混合使用了不同的中文字体时,如微软雅黑和宋体。在转换过程中,如果不能正确处理这些字体,就会导致乱码。Apache POI是一...
在某些情况下,我们需要将Word文档转换为PDF格式,这在跨平台协作或确保文档一致显示时非常有用。LibreOffice是一款免费且开源的办公软件套件,它提供了类似Microsoft Office的功能,包括文档编辑、表格处理、演示...
然而,当你尝试使用OpenOffice将文档转换为PDF格式时,可能会遇到中文字符显示为乱码的问题。这个问题通常涉及到编码设置、字体支持以及OpenOffice的配置。 首先,乱码问题可能源于字符编码不匹配。Linux系统默认...
在Linux环境下将Excel转换为PDF并确保字体正确显示是一个常见的需求,特别是在跨平台协作和文档共享时。在Linux操作系统中,由于默认字体可能与Windows或Mac系统中的不同,因此在转换过程中可能会遇到字体不匹配的...
标题提到的"PDF,EXCEL,WORD,WPS,PPT转换为txt文件"是指将这些常见办公软件的文件格式转换成纯文本(txt)格式。这样的转换对于数据提取、文本分析、文件归档等应用场景非常有用。以下是对这些知识点的详细解释: 1....
OpenOffice 是一个功能强大且流行的办公软件,支持多种格式的文件,包括文本、表格、演示文稿等。 字体安装的重要性 ------------------ 字体安装对 Linux 系统的正常使用非常重要。正确的字体安装可以确保文档的...
2.2.1.jar`和`jodconverter-2.2.1-sources.jar`两个文件,它们是`JodConverter`库的核心组件,用于解决OpenOffice在转换2007及以上版本的Office文档到PDF时遇到的问题,以及处理可能出现的TXT文件乱码问题。...
PDF(Portable Document Format)是一种由Adobe Systems开发的文件格式,用于呈现文档,包括文本格式化和图像,独立于软件、硬件和操作系统。然而,由于PDF的固定布局特性,有时我们需要将其转换为更便于编辑的Word...
- 格式保留:转换过程中,保留原始格式和布局是一项挑战,特别是从PDF转到docx或doc时。 - 图像和图表:图片和图表可能在转换过程中失真或丢失,需要特别注意。 5. **自动化和批量转换**: 对于大量文件的转换,...
在生成PDF文档时,由于doc格式的Word文档在使用OpenOffice或xdocreport生成PDF时可能会遇到兼容性问题,比如格式不兼容、中文乱码等,因此推荐使用docx格式的Word文档来生成PDF,或者先将Word文档转换为HTML,再由...
对于PDF文件,TextForever能够解析其文本内容并转换成TXT,保留原文档的基本结构和可读性。PDF通常用于创建和分享固定布局的文档,但其编辑和复制文本有时会受到限制,转换成TXT后则能方便地进行编辑和检索。 DOC和...
在Windows 64位操作系统中,编码问题是一个常见的挑战,特别是在与Linux系统交互时,比如在使用unoconv插件将不同格式的文件转换为PDF格式时遇到的乱码问题。这是因为不同的操作系统和软件可能采用不同的字符编码...
7. 解决打印问题:如果直接打印OpenOffice文档遇到问题,可以先将其导出为PDF,再使用PDF阅读器进行打印。 8. 绘图工具使用:通过“视图”>“工具栏”>“绘图”开启绘图工具栏,提供丰富的绘图和图形编辑功能。 9....
OpenOffice或LibreOffice在Linux下常用于转换文档格式,比如将Office文档转换为PDF。安装过程通常通过包管理器完成,例如在Ubuntu上使用`apt-get install openoffice.org`。如果遇到中文乱码问题,可能需要调整字符...
4.1 OpenOffice.org套件介绍 ................................... 117 4.1.1 OpenOffice.org文字处理 ........................... 119 4.1.2 OpenOffice.org电子表格 ........................... 119 ...
- **字符编码**:POI 支持 Unicode 编码,尤其对于中文等多字节字符,可以通过设置正确的编码避免乱码问题。 - **性能优化**:处理大量数据时,要注意内存管理,可以使用SXSSF(Streaming Usermodel API)来减少...
4.1 OpenOffice.org套件介绍 ................................... 117 4.1.1 OpenOffice.org文字处理 ........................... 119 4.1.2 OpenOffice.org电子表格 ........................... 119 ...