java 转换word doc docx 等office文档 为pdf,无需破解 aspose ,无水印

4 篇文章 0 订阅

为何会有该需求?

网页只能预览PDF,无法对 doc,xls 等 其他office 格式的文件预览。收费的在线预览倒是可以,但是1不安全,2收费。
So, 有免费的方案吗?

踩过的坑:

来自不能删评论的 V2EX 的问题 https://www.v2ex.com/t/792458#;
在这里插入图片描述
总结下,这些方案的鸡肋之处 如下 10点 👇

  1. 调接口? 还要尼玛的注册 aliyun 沙雕账号,还要实名制的手机号? 接口还收费,尼玛什么玩意。
    如果所有的需求都去调接口,那还要程序猿干什么? 程序螈就够了呢
  2. wps 或者 windows office 接口? 你以为你部署在自己的 windows 测试自己玩呢? 谁的 项目不是跑在线上的 linux
  3. libreoffice ? 你让运维给你现场去装 这个 软件到 linux 服务器吗? 运维问: 你谁啊你?
    如果你的需求是 预览各种格式的文档,那么还是有必要让运维 在linux 服务器装一下 libreoffice的见下文 kkFileView的使用说明
  4. 还有的 调用 google doc 或者 微软 doc 在线接口的,我就问问了,你们的老大知道你把 文档远程传输到外网了吗?
  5. fr.opensagres.xdocreport.core , 这个其实是需要 POI 的,并且不支持 word 中有表格的,会报错的。
  6. aspose-word , 效果虽好,但是 收费,有水印。官网在线案例点我
  7. spire doc ,效果也不错,但是 收费,有水印 官网在线案例点我
  8. jOfficeConvert:demo 看起来不错,但是收费,而且还看不到源码 。 官网只是说自己使用了 Microsoft Word Viewing Technology 实现的。但是 完全搜索不到相关信息在 微软的官网。所以,难道就是 windows seerver 服务器本地装了 office 进行转换的 ?
    官网在线案例点我
  9. openoffice jodconverter 没试过,没有发言权。
  10. 其他方案,大部分看了,都是垃圾,要么 项目太老了,要么太新了,不匹配旧的 POIjdk7
    来自stackoverflow 的其他大婶给的方案,目测都是垃圾
    在这里插入图片描述

解决思路1: 用收费版的aspose或者 spire doc 转换后,再去除水印

来源:踏破铁鞋无秘书 —》 源网址 http://www.codebaoku.com/it-java/it-java-250846.html

在这里插入图片描述

  • 原作者的代码已经近乎完美,可以直接CV 大法。但是还是 留了很多坑,下面是填坑的地方。
  • 直接CV 大法该代码 会有3个坑,
    1. 去除水印的pdf 损坏打不开;
    2. 文字水印无法去除;
    3. 无法去除图片水印。
  • 我调试了半天才发现, 应该是防止 CV大师们随意施展大法吧,挺好。 解毒:
  1. 这行代码,会导致 pdf文件损坏,无法打开。 直接 注释掉这行代码即可。
    这个是作者故意设置的巨坑
    // document.removePage(document.getNumberOfPages() - 1);
  2. replaceText(page, "Ltd.", ""); // 这里的几行代码,要改成 跟你的看到的水印一毛一样的。aspose不同的版本,水印文字也有差异。否则无法删除。
  3. 该行代码,参数 X1 可调,removeImage(page, "X1"); // X1 可以改为 X2 X3 等等,数字代表 遍历到的图片序号

优化完后的代码,TODO 上传

解决思路2:crack aspose-word : 15.8.0 ,windows可以,linux待测试

有人说 ,windows 本地测试是好的,放到linux 就不行,待测试。
缺点: 仅限word,无法破解 excel

如果不行的话,那只能手动 去除一下水印了
15.8.0 下载地址:https://blog.csdn.net/m0_49605579/article/details/121806823
打包部署到 springboot 注意事项 https://blog.csdn.net/cheng137666/article/details/111677549

解决思路3:更腻害的招式 --》 office->html->浏览器完美预览

上面用 PDF 去水印时,定位水印的位置难度很大。 因此,如何绕开 删除PDF水印 这一步?,转化为html可谓不要太省心。
使用 aspose 先把 word和excel 等转换为 html 格式,然后对 生成的 html 进行 js 操作 删除指定的水印就好了
效果太棒了,而且 本身生成的 html 文件完全兼容 网页预览的格式。可以说是目前 最佳方案了。
其他优点:便于存储备份到数据库,相比存储word和excel 等文件,html 代码 的占用空间更小,直接存 clob 或者 vachar2 即可

  • word 转换为 Html

     <dependency>
         <groupId>com.aspose</groupId>
         <artifactId>aaspose-words</artifactId>
         <version>20.1</version>
         <classifier>jdk17</classifier>
     </dependency>
    
    @SneakyThrows
    @SneakyThrows
    public static void excel2Html(String filePath) {
        Document doc = new Document(filePath);
        final com.aspose.words.HtmlSaveOptions options = new HtmlSaveOptions(SaveFormat.HTML);
        doc.save(filePath + ".html", options);
    }
    
  • word 转换成 html 效果图
    在这里插入图片描述

  • excel 转换为 Html

     <dependency>
         <groupId>com.aspose</groupId>
         <artifactId>aspose-cells</artifactId>
         <version>22.6</version>
     </dependency>
    
    @SneakyThrows
    public static void excel2Html(String filePath) {
        Workbook wbk = new Workbook(filePath);
        final HtmlSaveOptions options = new HtmlSaveOptions(SaveFormat.HTML);
        wbk.save(filePath + ".html", options);
        // TODO java 手动去除 water mark ; 或者页面上 用 js 去除,都很方便
    }
    
  • excel 转换成 html 效果图
    在这里插入图片描述

解决思路4:后期最省心的开源方案,预览任意格式文件

国人2017年就开源的 kkFileView,原理是调用 libreoffice等,效果不错 https://github.com/kekingcn/kkFileView

ありがとうございます

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值