美文网首页Java 杂谈
Linux下SpringBoot实现Word转PDF

Linux下SpringBoot实现Word转PDF

作者: God_Moon | 来源:发表于2019-04-16 13:44 被阅读2次

    引言

    最近由于项目需要一个Word在线预览的功能,由于考虑基于Linux平台做部署,实现真正的Word在线预览是不现实的,所以考虑通过Word转PDF实现PDF的在线预览。

    经过一番研究,试了多种方式包括POI实现Word转PDF,以及Word转HTML再转PDF等方式,但均存在操作非常复杂和效果不理想以及兼容性不好等问题,最终锁定借助LibreOffice实现Word转PDF的方案。

    Linux安装LibreOffice(在Ubuntu Server 18.04下实验)

    1.访问http://download.documentfoundation.org/libreoffice/stable/6.2.2/deb/x86_64/ 下载离线安装包:

    • LibreOffice_6.2.2_Linux_x86-64_deb.tar.gz
    • LibreOffice_6.2.2_Linux_x86-64_deb_langpack_zh-CN.tar.gz
    • LibreOffice_6.2.2_Linux_x86-64_deb_sdk.tar.gz

    2.将三个安装包复制到Linux系统,执行以下指令:

    sudo mkdir /opt/libreoffice
    
    sudo tar -zxvf LibreOffice_6.2.2_Linux_x86-64_deb.tar.gz -C /opt/libreoffice/
    
    sudo tar -zxvf LibreOffice_6.2.2_Linux_x86-64_deb_langpack_zh-CN.tar.gz -C /opt/libreoffice/
    
    sudo tar -zxvf LibreOffice_6.2.2_Linux_x86-64_deb_sdk.tar.gz -C /opt/libreoffice/
    
    cd /opt/libreoffice/LibreOffice_6.2.2.2_Linux_x86-64_deb/DEBS
    
    sudo dpkg -i *.deb
    
    cd /opt/libreoffice/LibreOffice_6.2.2.2_Linux_x86-64_deb_sdk/DEBS
    
    sudo dpkg -i *.deb
    
    cd /opt/libreoffice/LibreOffice_6.2.2.2_Linux_x86-64_deb_langpack_zh-CN/DEBS
    
    sudo dpkg -i *.deb
    
    sudo apt-get install libxinerama1
    
    sudo apt-get install libcairo2-dev
    
    sudo apt-get install libcups2-dev
    

    Word转PDF测试

    libreoffice6.2 --headless --invisible --convert-to pdf <待转换的word路径> --outdir <生成的pdf路径>
    

    此时可在输出目录看到已经生成了转换后的PDF文件,但是打开查看文件发现字符乱码。

    添加字体支持

    1.下载如下字体:

    • simsun.ttc 宋体
    • simhei.ttf 黑体
    • msyh.ttf 微软雅黑
    • msyhbd.ttf 微软雅黑

    2.在/usr/share/fonts/truetype下面建立一个文件夹CustomizedGonts,把字体文件复制进来。

    3.把字体文件夹和字体文件都赋予权限

    sudo chmod 777 CustomizedFonts
    cd CustomizedFonts
    sudo chmod 777 *
    

    4.安装字体

    sudo mkfontscale
    sudo mkfontdir
    sudo fc-cache
    

    Word转PDF测试

    libreoffice6.2 --headless --invisible --convert-to pdf <待转换的word路径> --outdir <生成的pdf路径>
    

    此时可在输出目录看到已经生成了转换后的PDF文件,并且文字显示正常。

    Spring Boot工程

    1.添加Maven依赖

    <dependency>
        <groupId>org.jodconverter</groupId>
        <artifactId>jodconverter-core</artifactId>
        <version>4.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.jodconverter</groupId>
        <artifactId>jodconverter-local</artifactId>
        <version>4.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.jodconverter</groupId>
        <artifactId>jodconverter-spring-boot-starter</artifactId>
        <version>4.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.libreoffice</groupId>
        <artifactId>ridl</artifactId>
        <version>5.4.2</version>
    </dependency>
    

    2.配置application.ptoperties

    jodconverter.local.enabled=true
    jodconverter.local.office-home=/opt/libreoffice6.2
    jodconverter.local.port-numbers=8100,8101,8102
    jodconverter.local.max-tasks-per-process=100
    

    3.pdf转换代码

    @RestController
    @RequestMapping("/doc")
    public class PDFController {
    
        @Autowired
        private DocumentConverter documentConverter;
    
        @RequestMapping("/pdf")
        public void toPdf() throws OfficeException {
            File word = new File("/home/doc/123.doc");
            File pdf = new File("/home/doc/123.pdf");
            documentConverter.convert(word).to(pdf).execute();
        }
    }
    

    相关文章

      网友评论

        本文标题:Linux下SpringBoot实现Word转PDF

        本文链接:https://www.haomeiwen.com/subject/eyhbwqtx.html