求助! Java 代码 word 转 pdf 有什么好方法吗?现在找到几个,各有优势,之前的人用的 open office,但是是使用命令在代码中启动的,而且还要单独弄个包,感觉很麻烦,还不好

2021-07-29 13:19:32 +08:00
 auto
1 、poi + itext 。 先转 html 再绘制,听说格式有差异。比较复杂,格式兼容差,跨平台。

2 、借助 openoffice 现在暂时用的这个 3 、jacob + ms linux 部署,这个似乎只能 windows 用 4 、docx4j 的 export pdf 组件。 感觉有点慢,对中文的支持似乎也不太行啊 5 、aspose 等其他组件。 付费的,前公司用的这个,感觉很好用啊,有没有类似的啊?
4437 次点击
所在节点    Java
37 条回复
paulluis2dev
2021-07-29 22:30:02 +08:00
我专门做过这个,免费的话也是我们现在方案是 LibreOffice 转,LibreOffice 版本越高转换效果越好,差异越小。可以调命令也可以引依赖,但本质还是起 soffice 进程转
mmdsun
2021-07-29 23:52:01 +08:00
java 有收费的 spire.doc 可以转换。

如果想完美+免费的话,就用 Windows 机子。java 也能调用 dll 或者 COM 组件。

引入 Microsoft.Office.Interop.Word.dll
转换就几句话。

document = application.Documents.Open(sourcePath);

document.ExportAsFixedFormat(targetPath, WdExportFormat.wdExportFormatPDF);
mmdsun
2021-07-30 00:03:34 +08:00
还有一种方式就是 Linux 命令转化,效果也还可以。

比如 pandoc,unoconv 。(不知道现在哪个好用,若楼主用了效果好可以告知一下。)

这种 java 也能调用拿 Runtime.execute 方法执行命令即可。

( java exec 执行命令很多坑 的自己封装脚本执行)
cz5424
2021-07-30 00:13:50 +08:00
@auto 这接口就是收费的 0.08 元 /次
fangshuai
2021-07-30 00:26:14 +08:00
poi-tl 生成 word 文档,在 linux 上安装 openoffice 或 libreoffice,通过 jodconverter api 进行转换,转换效果还是可以的
statumer
2021-07-30 00:46:01 +08:00
aspose 效果是最好的,你可以自己破解一下
其他开源方案都比较辣鸡,亲测
kpingdd
2021-07-30 01:41:12 +08:00
试试 spire.doc 吧,速度可能不太理想
sundev
2021-07-30 02:05:36 +08:00
最好的方案是调用 office,我试过了,其他都不完美!我现在专门弄了一台 windows 然后安装 office,程序调用 com 接口!
magicdu
2021-07-30 08:27:48 +08:00
aspose-word,感觉还可以,就是有些表格样式需要调整下
linbingcheng
2021-07-30 08:58:39 +08:00
这种事情不花钱买服务对接,个人实现真的很鸡肋,完全没法看,别人都是一个团队在做,专业的事情要找专业的干
encro
2021-07-30 09:17:36 +08:00
1,只有买第三方服务,格式无法保证,看对方实现方法,网上最多的 libreoffice 方案;
2,用微软自带 office 转换,需要 c#与 windows,格式是最好的,默认速度有点慢(大于 5 秒),有办法优化到 2 秒左右,不过是公司机密,不能告诉你;

如果你只是看看可以用方法 1,如果你需要打印那么需要方法 2 或者 spire/aspose 。

我们公司因为量比较大,以及全部需要打印,所以采用的是 2,自己建立的 c#队列服务,调用方队列发送过来,完了再发送回去。
encro
2021-07-30 09:22:33 +08:00
@shoaly
效果怎么样?能用于打印还是预览?
shoaly
2021-07-30 11:58:04 +08:00
@encro 我们当时的目的是 把 ppt 和 word 转换成线上预览 且需要防盗版水印... 所以直接就直接转换成 jpg 页面了, 效果挺好的... 没怎么转 pdf, 虽然是支持的. 效果挺好的
STtree
2021-07-30 15:59:18 +08:00
以前研究过这个问题,linux 下 openoffice 应该是最好的解决方案了,然而还是很难做到 1:1 还原。这种要想有好的效果,要么调 MS Office 或 wps,要么就上一些收费服务和模块。
encro
2021-07-30 23:35:25 +08:00
@shoaly

应该订订也是用这个方案,感觉还可以,好像只有偶尔有问题。楼主可以试一下。
stormfeng
2022-06-23 12:38:06 +08:00
楼上各种方案,都不是 博主想要的 maven 呀!
1 )调接口? 还要尼玛的注册 aliyun 沙雕账号,还要实名制的手机号? 接口还收费,尼玛什么玩意。
如果所有的需求都去调接口,那还要程序猿干什么? 程序媛就够了呢
2 )调 wps 或者 windows 接口? 你以为你部署在自己的 windows 测试自己玩呢? 谁的 项目不是跑在线上的 linux 呀
3 )调 libreoffice ? 你让运维给你现场去装 这个 软件到 linux 服务器吗? 运维问: 你谁啊你?
4 )还有的 调用 google doc 或者 微软 doc 在线接口的,我就问问了,你们的老大知道你把 文档远程传输到外网了吗?
5 ) fr.opensagres.xdocreport.core , 这个其实是需要 POI 的,并且不支持 word 中有表格的,会报错的。
6 ) aspose-word , 效果虽好,但是 收费,有水印。https://zh.blog.aspose.com/2021/04/23/%E5%9C%A8java%E4%B8%AD%E4%BB%A5%E7%BC%96%E7%A8%8B%E6%96%B9%E5%BC%8F%E5%B0%86word-doc-docx%E8%BD%AC%E6%8D%A2%E4%B8%BApdf/
7 ) spire doc ,效果也不错,但是 收费,有水印
https://www.e-iceblue.cn/spiredocforjavaconversion/java-convert-word-to-pdf.html
8 ) jOfficeConvert:demo 看起来不错,但是收费,而且还看不到源码 。 官网只是说自己使用了 Microsoft Word Viewing Technology 实现的。但是 完全搜索不到相关信息在 微软的官网。所以,难道就是 windows seerver 服务器本地装了 office 进行转换的 ?
https://www.qoppa.com/pdfhtml/demo/html5-pdf-viewer-live-demo/
9 ) openoffice 和 jodconverter 没试过,没有发言权。
10)其他方案,大部分看了,都是垃圾,要么 项目太老了,要么太新了,不匹配旧的 POI 和 jdk7 , https://stackoverflow.com/questions/3022376/how-can-i-convert-a-word-document-to-pdf
综上:
思路如下: 用收费版的 先把 word 转换为 pdf ,然后再把其中的水印去掉!
具体的代码都有了:
http://www.codebaoku.com/it-java/it-java-250846.html
stormfeng
2022-06-23 17:42:59 +08:00
@stormfeng 直接 CV 大法该代码 会有 3 个坑,
1 ) 去除水印的 pdf 损坏打不开; 2 )文字水印无法去除; 3 )无法去除图片水印。

我调试了半天才发现, 应该是防止 CV 大师们随意施展大法吧,挺好。
1 )这行代码,会导致 pdf 文件损坏,直接 注释掉这行代码即可。
// document.removePage(document.getNumberOfPages() - 1);

2 ) replaceText(page, "Ltd.", ""); // 这里的几行代码,要改成 跟你的看到的水印一毛一样的。aspose 不同的版本,水印文字也有差异。否则无法删除。

3 )该行代码,参数 X1 可调,removeImage(page, "X1"); // 可以改为 X2 X3 等等,数字代表 遍历到的图片序号

总结:
改好的代码,已经上传了,here
https://blog.csdn.net/w1047667241/article/details/125431049

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/792458

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX