V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kieya00
V2EX  ›  Java

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

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

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

    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 文档用什么软件写的,就用那个软件转换。
    wunonglin
        7
    wunonglin  
       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   ·   我们的愿景   ·   实用小工具   ·   3217 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 13:03 · PVG 21:03 · LAX 06:03 · JFK 09:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.