zoukankan      html  css  js  c++  java
  • 用java将简单的word文档换成pdf文档

    用java将简单的word文档换成pdf文档的方式很多,因为很多都没有实际测试过,所以这里就先泛泛的说一下

    整体上来看分两种:

      1.纯java代码实现,有很多优秀的开源软件可以用,比如poi,itext,xdocreport,docx4j等等。主要缺点是只能处理简单的文档

      2.通过在操作系统安装转换软件,在java代码中调用软件命令来实现转换。常用的有OpenOffice,Pandoc,Jacob(限于Windows环境)等软件,优点是对于复杂的文档也能很好的处理。缺点是会麻烦一点,有的不能跨平台,速度上可能也会慢一点

    这里主要说一下我用xdocreport将word文档转成pdf文档的代码,xdocreport其实是对poi和itext的封装,进一步简化代码。下面看我的maven依赖

            <!--Maven依赖,只多不少-->
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>common-codec</artifactId>
                <version>1.5</version>
            </dependency>
            <dependency>
                <groupId>dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>1.6.1</version>
            </dependency>
            <dependency>
                <groupId>fr.opensagres.xdocreport</groupId>
                <artifactId>fr.opensagres.xdocreport.itext.extension</artifactId>
                <version>1.0.4</version>
            </dependency>
            <dependency>
                <groupId>com.lowagie</groupId>
                <artifactId>itext</artifactId>
                <version>2.1.7</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>ooxml-schemas</artifactId>
                <version>1.1</version>
            </dependency>
            <dependency>
                <groupId>fr.opensagres.xdocreport</groupId>
                <artifactId>org.apache.poi.xwpf.converter.core</artifactId>
                <version>1.0.4</version>
            </dependency>
            <dependency>
                <groupId>fr.opensagres.xdocreport</groupId>
                <artifactId>org.apache.poi.xwpf.converter.pdf</artifactId>
                <version>1.0.4</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.9</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.9</version>
            </dependency>
            <dependency>
                <groupId>javax.xml.stream</groupId>
                <artifactId>stax-api</artifactId>
                <version>1.0-2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.xmlbeans</groupId>
                <artifactId>xmlbeans</artifactId>
                <version>3.0.0</version>
            </dependency>    

    maven依赖的版本很多都比较老了,但这不重要,能实现功能就是好的,要是换成其他更高的版本可能会报错,另外里面可能有个别依赖不是必须的,你有兴趣可以自己试一试。下面上代码

    import org.apache.poi.xwpf.converter.pdf.PdfConverter;
    import org.apache.poi.xwpf.converter.pdf.PdfOptions;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    
    import java.io.*;
    import java.util.HashMap;
    import java.util.Map;
    
    public class WordToPDF {
    
        /**
         * 将word文档, 转换成pdf, 中间替换掉变量
         * @param source 源为word文档, 必须为docx文档
         * @param target 目标输出
         * @throws Exception
         */
        public static void wordConverterToPdf(InputStream source, OutputStream target) throws Exception {
            XWPFDocument doc = new XWPFDocument(source);
            PdfOptions options = null;//因为是简单处理,该参数就设置成了null,有需要的可以研究一下
            PdfConverter.getInstance().convert(doc, target, options);
        }
    
        //测试
        public static void main(String[] args) {
            String filepath = "F:\temp\test.docx";
            String outpath = "F:\temp\test.pdf";
            InputStream source;
            OutputStream target;
            try {
                source = new FileInputStream(filepath);
                target = new FileOutputStream(outpath);
                Map<String, String> params = new HashMap<String, String>();
                wordConverterToPdf(source, target);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }

    至此就算实现了将简单word文档转成pdf文档的功能。最后再说一下注意的地方,

    1.如果你改变了maven依赖的版本可能会有报错,

    2.注意word文档中汉字的字体

    这里会显示你文档的汉字字体名称,其中有一些字体在转换的时候会消失,不能显示,就我知道有"宋体(正文)",注意它不同于“宋体”。

    有错误欢迎指出,有好代码希望能分享一下。

    附上参考资料地址:https://github.com/opensagres/xdocreport/wiki/DocxReportingJavaMainConverter

  • 相关阅读:
    深度历险:Redis 内存模型详解
    Redis 的 8 大应用场景!
    Java并发计数器探秘
    更改系统环境设置,让alias永远生效
    GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令
    数据集成实例
    客户视角:Oracle ETL工具ODI
    OGG-00782
    Oracle过程包加密
    Concurrent Request:Inactive phase,No Manager status
  • 原文地址:https://www.cnblogs.com/coffee9527/p/9463742.html
Copyright © 2011-2022 走看看