SnowRoc 2021-03-17 09:50 采纳率: 0%
浏览 94

openoffice将txt转换成pdf乱码

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();
                }
            }
        }
    }
  • 写回答

3条回答 默认 最新

  • a1767028198 2021-03-17 11:15
    关注

    如果是文本的话,直接生成pdf都行,

    至于doc这些,把windows的字体全部拷贝过去试试呗,之前我们用其他api,也出现了部分doc乱码的问题,把字体包拷贝全就没事了

    评论

报告相同问题?

悬赏问题

  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音