基于 aspose.word 的 Java 文档转换项目

本贴最后更新于 2030 天前,其中的信息可能已经天翻地覆

抽象工厂模式设计的一款工具项目,方便快速实现 html 转 PDF、doc 转 PDF 等功能

项目源代码:github/simple-convert

如何使用

  • 使用 Maven 下载依赖

        <dependency>
          <groupId>com.liumapp.simple.convert</groupId>
          <artifactId>simple-convert</artifactId>
          <version>v1.0.0</version>
        </dependency>
    
  • 拷贝 repo 目录到本地项目中,否则会提示找不到 aspose 的 jar 包

    当然,您也可以自行将 libs 目录下的 aspose 这个 jar 包部署到自己的 nexus 私服或者导入 maven 的本地仓库中

  • html 转 doc

    • 通过文件目录转换

          BasicConverter converter = new HtmlToPdfConverterFactory().getInstance();
          String htmlFilePath = HtmlToPdfConverterTest.class.getClassLoader().getResource("test.html").getPath();
          String pdfResultPath = "./result.pdf";
          converter.convertByFilePath(htmlFilePath, pdfResultPath);
      

      执行后将 htmlFilePath 所指向的 html 文件转换为 pdf 文件,并保存在 pdfResultPath 路径下

    • 通过输入流转换

          BasicConverter converter = new HtmlToPdfConverterFactory().getInstance();
          String targetFilePath = HtmlToPdfConverterTest.class.getClassLoader().getResource("test.html").getPath();
          InputStream is = new FileInputStream(targetFilePath);
          OutputStream os = new FileOutputStream(new File("./result2.pdf"));
          converter.convertByStream(is, os);
          os.flush();
          is.close();
          os.close();
      

      将要转换的 html 文件作为输入流输出,输出流为要存储的 pdf 文件输出流,也可以使用 ByteArrayOutputStream 暂存在内存中

    • 通过 base64 转换

          BasicConverter converter = new HtmlToPdfConverterFactory().getInstance();
          String targetFilePath = HtmlToPdfConverterTest.class.getClassLoader().getResource("test.html").getPath();
          InputStream is = new FileInputStream(targetFilePath);
          String inputBase64 = Base64FileTool.inputStreamToBase64(is);
          String resultBase64 = converter.convertByBase64(inputBase64);
          is.close();
      

      inputBase64 为 html 文件内容的 base64 值,输出的 resultBase64 为转换后的 pdf base64 值

    • 直接传入 html 字符串转 pdf 文件

      同通过 base64 转换一样,将 html 字符串加密为 base64 值,将转换后的 base64 解密存储即可得到 pdf 文件

           BasicConverter converter = new HtmlToPdfConverterFactory().getInstance();
           String htmlContents = "<h3>你的第一个html转PDF文档出来啦!!</h3>\n" +
                   "<br>\n" +
                   "<div style=\"color: aquamarine\">\n" +
                   "    注意:html5以及css3的支持还不够完善!!!\n" +
                   "</div>\n";
           String inputBase64 = Base64.getEncoder().encodeToString(htmlContents.getBytes());
           String resultBase64 = converter.convertByBase64(inputBase64);
           Base64FileTool.saveBase64File(resultBase64, "./result10.pdf");
      

      Base64FileTool 这个类来自于 qtools-file 依赖

  • doc 转 pdf

    • 通过文件目录转换

          BasicConverter converter = new DocToPdfConverterFactory().getInstance();
          converter.convertByFilePath("./data/test.doc", "./result4.pdf");
      
    • 通过输入流转换

          BasicConverter converter = new DocToPdfConverterFactory().getInstance();
          FileInputStream is = new FileInputStream("./data/test.doc");
          FileOutputStream os = new FileOutputStream("./result5.pdf");
          converter.convertByStream(is, os);
          is.close();
          os.close();  
      

注意事项

  • 在 pom.xml 中,不要使用 system scope 引入 jar 包,而要通过在项目设立一个 maven 本地仓库:repo 目录,将所需要的第三方 jar 包 deploy 进去(不能直接从 maven 下载,原因你懂的)

    • system scope 引入的包,在使用 jar-with-dependencies 打包时将不会被包含,可以使用 resources 将本地包打进 jar-with-dependencies

    • 关于本地 repositor 的创建和使用,可以参考 这里

  • html 转 PDF 的功能还不够完善,不能完美支持:html5 + css3(或者说能够完美支持 html5 + css3 的破解版本还没有出来)

  • 所有转换默认是以 A4 纸作为最终的 PDF 页面大小,如果要进行更改的话,请直接使用 BasicConverter 的 getDocument 和 getDocumentBuilder 方法,在获取到 Document 对象或者 DocumentBuilder 对象后,修改 pageSetup 的相关属性,具体请参考 aspose 的文档

    或者直接参考这一段代码:

        BasicConverter converter = new HtmlToPdfConverterFactory().getInstance();
        DocumentBuilder builder = converter.getDocumentBuilder();
        PageSetup pageSetup = builder.getPageSetup();
        pageSetup.setPageWidth(2000);
        pageSetup.setPageHeight(100);
        String htmlFilePath = HtmlToPdfConverterTest.class.getClassLoader().getResource("test.html").getPath();
        String pdfResultPath = "./result11.pdf";
        converter.convertByFilePath(htmlFilePath, pdfResultPath);
        assertEquals(true, FileTool.isFileExists("./result11.pdf"));
    
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3186 引用 • 8212 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
liumapp
Github: https://github.com/liumapp 杭州

推荐标签 标签

  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 53 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 437 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖 • 2 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    7932 引用 • 36284 回帖 • 169 关注
  • abitmean

    有点意思就行了

    30 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 541 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖 • 3 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 383 关注
  • 反馈

    Communication channel for makers and users.

    123 引用 • 911 回帖 • 237 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 606 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 3 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 337 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    190 引用 • 1057 回帖 • 1 关注
  • danl
    128 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    148 引用 • 257 回帖
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖 • 1 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 461 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 533 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 53 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 1 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 465 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖 • 2 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖