有大神吗?拜托了。。用 LibreOffice,转换为 PDF 后,格式混乱 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kieya00
V2EX    Java

有大神吗?拜托了。。用 LibreOffice,转换为 PDF 后,格式混乱

  •  
  •   kieya00 2019-10-12 20:27:17 +08:00 9920 次点击
    这是一个创建于 2222 天前的主题,其中的信息可能已经有所发展或是发生改变。

    谁用过了 LibreOffice,转换为 PDF 后,里面的内容排版格式混乱,doc 和 docx 转过去都有问题,Linux 和 win 下也都有问题,很通过,搞了两天两夜了。。。。求大神,v2ex 是我最后的希望

    !-- SOL tip topic -->
    29 条回复    2020-09-15 11:19:31 +08:00
    kieya00
        1
    kieya00  
    OP
       2019-10-12 20:27:58 +08:00
    真的跪了,大神快来
    tempdban
        2
    tempdban  
       2019-10-12 20:34:36 +08:00 via Android
    为啥不用 word…
    whileFalse
        3
    whileFalse  
       2019-10-12 20:46:31 +08:00
    很正常。
    EastLord
        4
    EastLord  
       2019-10-12 20:52:25 +08:00
    格式乱了很正常
    JackieMe
        5
    JackieMe  
       2019-10-12 20:58:33 +08:00 via Android
    装个 WPS 试试?反正我是 WPS 和 LibreOffice 都装着备用
    AEANWspPmj3FUhDc
        6
    AEANWspPmj3FUhDc  
       2019-10-12 20:58:52 +08:00
    word 文档用什么软件写的,就用那个软件转换。
    shakaraka
        7
    shakaraka  
    PRO
       2019-10-12 21:00:53 +08:00
    word 或者 WPS,干嘛想不开用 LibreOffice ?
    richard1122
        8
    richard1122  
       2019-10-12 21:32:50 +08:00
    应该还可以直接用微软的在线 office 吧
    lisces
        9
    lisces  
       2019-10-12 21:35:22 +08:00   2
    没搞过的根本不懂需求,LibreOffice 有命令行,可以作为任务自动执行。
    LibreOffice 其实非常强大,绝大部分乱的格式都可以调整到位,处理的思路很简单,就是实现比较繁琐。简单直接的自动转换格式肯定会乱,处理方法就是用模板,比如 word 里有正文和脚注,那么预先按照 word 的版式建好对应的 pdf 模板,内容上可以填上变量的方式,比如正文的地方写${content} ,脚注的地方写${footnote},执行的时候用代码去解析 word 中对应的区块内容,然后替换对应的变量,最后再做其它处理。
    word 中的索引、分栏、页码、头注、脚注、测注、角标、竖版等等各种版面格式都可以完美的转换到 pdf,甚至用建几十个模板适配不同图片大小的方式,来接近完美的解决图文环绕。
    我在七八年前就在某产品体系里做过这个工作,效果秒杀百度文档、豆丁之类的在线网站,和市面上所有能找到的自动转换工具。当时这套系统也有一个问题,就是需要用户预先手工选定匹配的模板。当时的产品失败了,十分可惜。其实如果可以继续不断迭代开发的话,我想可以在产品端加入一些生成缩略图然后智能识别匹配的方式,最终把用户需要选择模板的步骤都省略了,实现一套近乎完美的在线转换工具。
    lisces
        10
    lisces  
       2019-10-12 21:39:01 +08:00
    这事做起来不难,就是贼烦。绣花针上雕佛经,螺蛳壳里做道场,是个很需要耐心的细致活。
    EastLord
        11
    EastLord  
       2019-10-12 21:39:16 +08:00
    我猜他想做在线预览
    whileFalse
        12
    whileFalse  
       2019-10-12 23:46:39 +08:00   1
    @lisces Office 有 Com 接口,PowerShell 调起来不比命令行费劲,还能用.NET 调用。
    blackwolf
        13
    blackwolf  
       2019-10-12 23:54:54 +08:00
    @lisces 这一套感觉跟 latex 差不多了,格式和文本分离
    vipcc
        14
    vipcc  
       2019-10-12 23:57:49 +08:00 via Android
    用 Office,成熟,简单
    zzl22100048"
        15
    zzl22100048  
       2019-10-13 00:36:50 +08:00 via iPhone
    是用 http 接口转的 pdf 吗,用接口转需要用 libreoffice 调格式,wps word openoffice 这几个格式有点区别
    gaolycn
        16
    gaolycn  
       2019-10-13 05:57:59 +08:00 via Android
    @lisces 请问你说的这个方案里,把 pdf 模板里的变量替换为真正的内容,这一步用什么工具替换?
    lyog
        17
    lyog  
       2019-10-13 07:03:11 +08:00 via iPhone
    哈哈,之前开发电子合同的时候用过,想要不乱的话,word 文档在 libreoffive 里预览试试,看到哪处乱掉就把哪处格式处理一下。处理完再转就可以了。
    ipwx
        18
    ipwx  
       2019-10-13 09:54:55 +08:00 via Android
    lycx5360
        19
    lycx5360  
       2019-10-13 10:23:53 +08:00
    @gaolycn word 的话只需要 jodconverter+itextpdf,后者可以实现根据关键字定位。如果需要处理一些复杂的 excel 可以结合 jxls 制作 excel 模板
    ungrown
        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 接口写脚本。
    熊与鱼掌不可得兼。
    jiewuza
        21
    jiewuza  
       2019-10-13 14:15:29 +08:00 via Android
    @lisces 好奇,你说的 libreoffice 中定义${content} ,这个哪里可以找到相关的使用说明或相关资料啊
    lisces
        22
    lisces  
       2019-10-13 15:32:41 +08:00
    @whileFalse web server 基本不会用 windows 系统的
    @gaolycn LibreOffice 官方的读写接口
    @ungrown 不是兼容 office 是人肉处理做到像素级的相似
    @jiewuza LibreOffice 官网
    ungrown
        23
    ungrown  
       2019-10-14 00:49:12 +08:00
    @lisces
    > 不是兼容 office 是人肉处理做到像素级的相似
    本末倒置,你就承认你不会 COM 编程不就行了
    kieya00
        24
    kieya00  
    OP
       2019-10-14 17:23:51 +08:00
    @EastLord 你猜对了。。就是转换后乱了,展示效果十分恶心啊
    kieya00
        25
    kieya00  
    OP
       2019-10-14 17:24:52 +08:00
    @lisces 感谢感谢,可是现在已经没有时间调试了,解决不了啊,很烦,简单格式没问题,一旦加入批注、表格、或者多张图片,就会混乱
    kieya00
        26
    kieya00  
    OP
       2019-10-14 17:25:50 +08:00
    @lyog 我们 word 有几十万中格式。。。调不过来。。哭了
    gaolycn
        27
    gaolycn  
       2019-10-22 16:15:57 +08:00
    @lisces LibreOffice 中唯一支持 PDF 的好像就 Draw 了,但是格式也会乱啊。没有找到 LibreOffice 读写 PDF 的文档,能具体说一下吗?
    @jiewuza 你找到了吗?
    lucyplay
        28
    lucyplay  
       2020-07-15 22:51:00 +08:00
    最后有找到什么解决办法吗?防止格式混乱
    11060
        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 楼说的很对
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4906 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 05:42 PVG 13:42 LAX 21:42 JFK 00:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86