谁用过了 LibreOffice,转换为 PDF 后,里面的内容排版格式混乱,doc 和 docx 转过去都有问题,Linux 和 win 下也都有问题,很通过,搞了两天两夜了。。。。求大神,v2ex 是我最后的希望
1
kieya00 OP 真的跪了,大神快来
|
2
tempdban 2019-10-12 20:34:36 +08:00 via Android
为啥不用 word…
|
3
whileFalse 2019-10-12 20:46:31 +08:00
很正常。
|
4
EastLord 2019-10-12 20:52:25 +08:00
格式乱了很正常
|
5
JackieMe 2019-10-12 20:58:33 +08:00 via Android
装个 WPS 试试?反正我是 WPS 和 LibreOffice 都装着备用
|
6
AEANWspPmj3FUhDc 2019-10-12 20:58:52 +08:00
word 文档用什么软件写的,就用那个软件转换。
|
7
wunonglin 2019-10-12 21:00:53 +08:00
word 或者 WPS,干嘛想不开用 LibreOffice ?
|
8
richard1122 2019-10-12 21:32:50 +08:00
应该还可以直接用微软的在线 office 吧
|
9
lisces 2019-10-12 21:35:22 +08:00 2
没搞过的根本不懂需求,LibreOffice 有命令行,可以作为任务自动执行。
LibreOffice 其实非常强大,绝大部分乱的格式都可以调整到位,处理的思路很简单,就是实现比较繁琐。简单直接的自动转换格式肯定会乱,处理方法就是用模板,比如 word 里有正文和脚注,那么预先按照 word 的版式建好对应的 pdf 模板,内容上可以填上变量的方式,比如正文的地方写${content} ,脚注的地方写${footnote},执行的时候用代码去解析 word 中对应的区块内容,然后替换对应的变量,最后再做其它处理。 word 中的索引、分栏、页码、头注、脚注、测注、角标、竖版等等各种版面格式都可以完美的转换到 pdf,甚至用建几十个模板适配不同图片大小的方式,来接近完美的解决图文环绕。 我在七八年前就在某产品体系里做过这个工作,效果秒杀百度文档、豆丁之类的在线网站,和市面上所有能找到的自动转换工具。当时这套系统也有一个问题,就是需要用户预先手工选定匹配的模板。当时的产品失败了,十分可惜。其实如果可以继续不断迭代开发的话,我想可以在产品端加入一些生成缩略图然后智能识别匹配的方式,最终把用户需要选择模板的步骤都省略了,实现一套近乎完美的在线转换工具。 |
10
lisces 2019-10-12 21:39:01 +08:00
这事做起来不难,就是贼烦。绣花针上雕佛经,螺蛳壳里做道场,是个很需要耐心的细致活。
|
11
EastLord 2019-10-12 21:39:16 +08:00
我猜他想做在线预览
|
12
whileFalse 2019-10-12 23:46:39 +08:00 1
|
14
vipcc 2019-10-12 23:57:49 +08:00 via Android
用 Office,成熟,简单
|
15
zzl22100048 2019-10-13 00:36:50 +08:00 via iPhone
是用 http 接口转的 pdf 吗,用接口转需要用 libreoffice 调格式,wps word openoffice 这几个格式有点区别
|
16
gaolycn 2019-10-13 05:57:59 +08:00 via Android
@lisces 请问你说的这个方案里,把 pdf 模板里的变量替换为真正的内容,这一步用什么工具替换?
|
17
lyog 2019-10-13 07:03:11 +08:00 via iPhone
哈哈,之前开发电子合同的时候用过,想要不乱的话,word 文档在 libreoffive 里预览试试,看到哪处乱掉就把哪处格式处理一下。处理完再转就可以了。
|
18
ipwx 2019-10-13 09:54:55 +08:00 via Android
|
19
lycx5360 2019-10-13 10:23:53 +08:00
@gaolycn word 的话只需要 jodconverter+itextpdf,后者可以实现根据关键字定位。如果需要处理一些复杂的 excel 可以结合 jxls 制作 excel 模板
|
20
ungrown 2019-10-13 10:38:46 +08:00 via Android
@lisces 知道你有需求,但是你不知道的是 libreoffice 和微软 office 其实不一样。
微软 office 本质上还是封闭的,虽然 docx 这个格式开源且标准化了,但那只是文件格式,里面怎么定义文档中的元素、怎么描述排版格式,微软其实是自己用着一套体系,根本不带开源社区一起玩。 libreoffice 已经尽其所能把常用功能和格式做到兼容了,其他能逆向的也尽力做了,然而还是不行:微软 office 里好好的排版,到了 libreoffice 里面就是会错乱甚至丢元素,你没有办法的。 想要用 libreoffice 就必须放弃对微软 office 所生成的文档的兼容性,想兼容其他人用微软 office 写的文档就只能老老实实用微软 office,想把微软 office 自动化就只能老老实实在 win 系统里调用 COM 接口写脚本。 熊与鱼掌不可得兼。 |
21
jiewuza 2019-10-13 14:15:29 +08:00 via Android
@lisces 好奇,你说的 libreoffice 中定义${content} ,这个哪里可以找到相关的使用说明或相关资料啊
|
22
lisces 2019-10-13 15:32:41 +08:00
@whileFalse web server 基本不会用 windows 系统的
@gaolycn LibreOffice 官方的读写接口 @ungrown 不是兼容 office 是人肉处理做到像素级的相似 @jiewuza LibreOffice 官网 |
25
kieya00 OP @lisces 感谢感谢,可是现在已经没有时间调试了,解决不了啊,很烦,简单格式没问题,一旦加入批注、表格、或者多张图片,就会混乱
|
27
gaolycn 2019-10-22 16:15:57 +08:00
|
28
lucyplay 2020-07-15 22:51:00 +08:00
最后有找到什么解决办法吗?防止格式混乱
|
29
11060 2020-09-15 11:19:31 +08:00 1
@lucyplay 不能直接用 LibreOffice 的命令行将 Office 格式的 Word ( doc,docx ) 转 PDF,这会导致样式内容非常错乱。我们在项目中使用都是用两套模板来兼容 Windows 和 Linux,Windows 下调用 COM 接口来转换; Linux 下用 LibreOffice 制作 ODF 格式的文本文档(.odt )模板,然后另存为 XML 格式的 ODF 文本文档,再用 FreeMarker 来填充数据,最后再调用 LibreOffice 命令行来转换。另外 20 楼说的很对
|