码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • java 转换word doc docx 等office文档 为pdf,无需破解 aspose ,无水印


    我的目标:在浏览器页面上直接预览word,excel,pdf 等

    • 为何会有该需求?
    • 踩过的坑:
    • 解决思路1: 用收费版的aspose或者 spire doc 转换后,再去除水印
      • 优化完后的代码,`TODO `上传
    • 解决思路2:crack aspose-word : 15.8.0 ,windows可以,linux待测试
    • 解决思路3:更腻害的招式 --》 office->html->浏览器完美预览
    • 解决思路4:后期最省心的开源方案,预览任意格式文件

    为何会有该需求?

    网页只能预览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. 其他方案,大部分看了,都是垃圾,要么 项目太老了,要么太新了,不匹配旧的 POI 和 jdk7 ,
      来自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 就不行,待测试。

    如果不行的话,那只能手动 去除一下水印了
    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水印 这一步,可谓省心。
    使用aspose 先把 word和excel等转换为 html 格式,然后对 生成的html 进行js 操作 删除指定的水印div就好了
    效果太棒了,而且 本身生成的 html 文件完全兼容 网页预览的格式。可以说是目前 最佳方案了。

    • word 转换为 Html

       <dependency>
           <groupId>com.aspose</groupId>
           <artifactId>aaspose-words</artifactId>
           <version>20.1</version>
           <classifier>jdk17</classifier>
       </dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      @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);
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • word 转换成 html 效果图
      在这里插入图片描述

    • excel 转换为 Html

       <dependency>
           <groupId>com.aspose</groupId>
           <artifactId>aspose-cells</artifactId>
           <version>22.6</version>
       </dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      @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 去除,都很方便
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • excel 转换成 html 效果图
      在这里插入图片描述

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

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

    • 使用效果 https://file.keking.cn/index
    • 还能用吗?2022年有人测试了 kkFileView,避坑指南
    • 去除kkd的水印与部属过程 参考
      -

    ありがとうございます

  • 相关阅读:
    【云原生】Kubernetes学习笔记
    最优化:建模、算法与理论(最优性理论
    MobLink后台基本配置
    javaScript的for循环语句练习之解决鸡兔同笼问题(基础版)
    双机备份?
    C++纯虚函数和抽象类 & 制作饮品案例(涉及知识点:继承,多态,实例化继承抽象类的子类,多文件实现项目)
    consul introduction
    windows配置测试工具jmeter和jdk安装
    【Jenkins】调用API构建并钉钉通知
    ArrayList常用方法
  • 原文地址:https://blog.csdn.net/w1047667241/article/details/125431049
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号