1.修改过字体了,并且也是先转换成utf-8,后缀名改为.odt,但是依旧乱码。
2.只有txt乱码,word文档,其他文档,都不会乱码
代码如下
/**
* office文件 转pdf
*
* @param sourceFile 源文件路径
* @param destFile 目标文件路径
* @return
*/
@SuppressWarnings("AlibabaLowerCamelCaseVariableNaming")
public boolean officeToPDF(String sourceFile, String destFile) {
try {
File inputFile = new File(sourceFile);
if (!inputFile.exists()) {
// 找不到源文件, 则返回false
return false;
}
// 如果目标路径不存在, 则新建该路径
File outputFile = new File(destFile);
if (!outputFile.getParentFile().exists()) {
outputFile.getParentFile().mkdirs();
}
//如果目标文件存在,则删除
if (outputFile.exists()) {
outputFile.delete();
}
if (sourceFile.contains(".txt")) {
// 讲txt转为odt
String odtFile = sourceFile.replace(".txt", ".odt");
copyByLineEncoding(sourceFile, "gbk", odtFile, "gbk");
inputFile = new File(odtFile);
// html、pdf 不转换
} else if (sourceFile.contains(".htm") || sourceFile.contains(".pdf")) {
return true;
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
OpenOfficeConnection connection = new SocketOpenOfficeConnection(openOfficeHost, openOfficePort);
connection.connect();
//用于测试openOffice连接时间
log.info("连接时间:" + df.format(new Date()));
DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);
converter.convert(inputFile, outputFile);
//测试word转PDF的转换时间
log.info("转换时间:" + df.format(new Date()));
connection.disconnect();
return true;
} catch (Exception e) {
e.printStackTrace();
log.error("openOffice连接失败!请检查IP,端口");
}
return false;
}
使用到的复制文件的方法
/**
* 文件复制
*
* @param srcFile
* @param srcEncoding
* @param destFile
* @param destEncoding
*/
private void copyByLineEncoding(String srcFile, String srcEncoding, String destFile,
String destEncoding) {
BufferedReader reader = null;
BufferedWriter writer = null;
try {
reader = new BufferedReader(new InputStreamReader(
new FileInputStream(srcFile), srcEncoding));
writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(destFile), destEncoding));
char[] charArray = new char[512];
int size;
while ((size = reader.read(charArray, 0, charArray.length)) != -1) {
writer.write(charArray, 0, size);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}