`
wx1568905209
  • 浏览: 26204 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

openoffice将txt文本转pdf中文乱码

 
阅读更多

问题描述:

   使用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

转载于:https://my.oschina.net/u/2277392/blog/1821103

分享到:
评论

相关推荐

    java实现PPT转PDF出现中文乱码问题的解决方法

    首先,我们要理解PPT转PDF乱码的根本原因。通常,PPT文件包含多种字体,特别是当一个页面上混合使用了不同的中文字体时,如微软雅黑和宋体。在转换过程中,如果不能正确处理这些字体,就会导致乱码。Apache POI是一...

    centos安装LibreOffice实现word转换PDF操作

    在某些情况下,我们需要将Word文档转换为PDF格式,这在跨平台协作或确保文档一致显示时非常有用。LibreOffice是一款免费且开源的办公软件套件,它提供了类似Microsoft Office的功能,包括文档编辑、表格处理、演示...

    openoffice乱码问题.rar

    然而,当你尝试使用OpenOffice将文档转换为PDF格式时,可能会遇到中文字符显示为乱码的问题。这个问题通常涉及到编码设置、字体支持以及OpenOffice的配置。 首先,乱码问题可能源于字符编码不匹配。Linux系统默认...

    excel转pdflinux下字体

    在Linux环境下将Excel转换为PDF并确保字体正确显示是一个常见的需求,特别是在跨平台协作和文档共享时。在Linux操作系统中,由于默认字体可能与Windows或Mac系统中的不同,因此在转换过程中可能会遇到字体不匹配的...

    PDF,EXCEL,WORD,WPS,PPT转换为txt文件

    标题提到的"PDF,EXCEL,WORD,WPS,PPT转换为txt文件"是指将这些常见办公软件的文件格式转换成纯文本(txt)格式。这样的转换对于数据提取、文本分析、文件归档等应用场景非常有用。以下是对这些知识点的详细解释: 1....

    linux字体超简单安装方法,兼容OpenOffice借鉴.pdf

    OpenOffice 是一个功能强大且流行的办公软件,支持多种格式的文件,包括文本、表格、演示文稿等。 字体安装的重要性 ------------------ 字体安装对 Linux 系统的正常使用非常重要。正确的字体安装可以确保文档的...

    jodconverter-2.2.1.rar

    2.2.1.jar`和`jodconverter-2.2.1-sources.jar`两个文件,它们是`JodConverter`库的核心组件,用于解决OpenOffice在转换2007及以上版本的Office文档到PDF时遇到的问题,以及处理可能出现的TXT文件乱码问题。...

    PDF转Word

    PDF(Portable Document Format)是一种由Adobe Systems开发的文件格式,用于呈现文档,包括文本格式化和图像,独立于软件、硬件和操作系统。然而,由于PDF的固定布局特性,有时我们需要将其转换为更便于编辑的Word...

    文件格式转换 convert

    - 格式保留:转换过程中,保留原始格式和布局是一项挑战,特别是从PDF转到docx或doc时。 - 图像和图表:图片和图表可能在转换过程中失真或丢失,需要特别注意。 5. **自动化和批量转换**: 对于大量文件的转换,...

    freemarker生成doc方案.pdf(内附代码下载地址)

    在生成PDF文档时,由于doc格式的Word文档在使用OpenOffice或xdocreport生成PDF时可能会遇到兼容性问题,比如格式不兼容、中文乱码等,因此推荐使用docx格式的Word文档来生成PDF,或者先将Word文档转换为HTML,再由...

    TextForever

    对于PDF文件,TextForever能够解析其文本内容并转换成TXT,保留原文档的基本结构和可读性。PDF通常用于创建和分享固定布局的文档,但其编辑和复制文本有时会受到限制,转换成TXT后则能方便地进行编辑和检索。 DOC和...

    window64为的编码

    在Windows 64位操作系统中,编码问题是一个常见的挑战,特别是在与Linux系统交互时,比如在使用unoconv插件将不同格式的文件转换为PDF格式时遇到的乱码问题。这是因为不同的操作系统和软件可能采用不同的字符编码...

    Open Office 3.1 设置及用法说明

    7. 解决打印问题:如果直接打印OpenOffice文档遇到问题,可以先将其导出为PDF,再使用PDF阅读器进行打印。 8. 绘图工具使用:通过“视图”&gt;“工具栏”&gt;“绘图”开启绘图工具栏,提供丰富的绘图和图形编辑功能。 9....

    linux下安装部署java web

    OpenOffice或LibreOffice在Linux下常用于转换文档格式,比如将Office文档转换为PDF。安装过程通常通过包管理器完成,例如在Ubuntu上使用`apt-get install openoffice.org`。如果遇到中文乱码问题,可能需要调整字符...

    UBUNTU桌面培训10.04 简体中文r1 PDF版

    4.1 OpenOffice.org套件介绍 ................................... 117 4.1.1 OpenOffice.org文字处理 ........................... 119 4.1.2 OpenOffice.org电子表格 ........................... 119 ...

    java操作Excel(Jakarta_POI).pdf

    - **字符编码**:POI 支持 Unicode 编码,尤其对于中文等多字节字符,可以通过设置正确的编码避免乱码问题。 - **性能优化**:处理大量数据时,要注意内存管理,可以使用SXSSF(Streaming Usermodel API)来减少...

    (错发,发现不用分割,无法删除,请下载完整版)UBUNTU桌面培训10.04 简体中文PDF版(part1)

    4.1 OpenOffice.org套件介绍 ................................... 117 4.1.1 OpenOffice.org文字处理 ........................... 119 4.1.2 OpenOffice.org电子表格 ........................... 119 ...

Global site tag (gtag.js) - Google Analytics