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

关于 Java 中复杂 PDF 转 JPG 的转换疑问

  •  
  •   MrJerry · 244 天前 · 1760 次点击
    这是一个创建于 244 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近有需求是转换 pdf 到 jpg ,之前一直使用 Apache PdfBox 转换,一直也能满足需求,但最近有复杂的 PDF 文件,转换后,jpg 图片出现乱码情况,想问大佬们有没有其他免费转换的库或者工具能够处理啊 转换前 :image-20240329183447617 转换后 :image-20240329183611225

    原 pdf 文件: https://www.lanzouw.com/igWLk1t346wb

    12 条回复    2024-03-30 17:53:21 +08:00
    aflow
        1
    aflow  
       244 天前
    看起来是没找到对应中文字体,配置下字体信息应该就可以了
    wxd21020
        2
    wxd21020  
       244 天前
    升级依赖包
    Puteulanus
        3
    Puteulanus  
       244 天前
    我们之前有个项目用 Poppler 转的
    ho121
        4
    ho121  
       244 天前 via Android
    盲猜是这个 pdf 没有内嵌中文字体,又没有在系统中找到中文字体,所以就显示方块
    MrJerry
        5
    MrJerry  
    OP
       244 天前
    @wxd21020 用了最新的依赖包,不行呢
    zhaoziyuan1989
        6
    zhaoziyuan1989  
       244 天前 via Android
    之前用 rust 调用 linux 下的 pdftoppm 实现过类似的需求,缺字体,是会乱码,字体的因素较大。
    MrJerry
        7
    MrJerry  
    OP
       244 天前
    @aflow 配置字体信息需要原字体格式吧,我这边不知道原字体格式,找不到对应字体,又该怎么处理呢
    dropdatabase
        8
    dropdatabase  
       244 天前 via iPhone
    字体问题。你看看 pdf 中的文字是啥字体。Java 运行环境把相关字体加上就行了。
    young1ee
        9
    young1ee  
       243 天前
    如果是 Windows 系统下正常,Linux 下不正常,可以把 Windows 字体文件全部复制到 Linux 的字体目录下
    moshiyeap100
        10
    moshiyeap100  
       243 天前
    试试看能不能指定一个缺省中文字体,如果找不到字体,就指定一个默认中文字体。
    moshiyeap100
        11
    moshiyeap100  
       243 天前
    我写了一个 demo ,能够正常处理,如果有需要可以联系我。绿色 :SnVuemhvdTE4MDkwOWR5
    MrJerry
        12
    MrJerry  
    OP
       243 天前
    问题已处理,升级最新依赖包,换用加载方法解决;发现和 pdfbox 版本还有一定关系,Apache PDFBox3.0 以后版本 PDDocument.load 改成了 Loader.loadPDF ;同样方法,采用 2.x 版本的 PDDocument.load 加载 pdf 转换就会乱码
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1833 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 16:30 · PVG 00:30 · LAX 08:30 · JFK 11:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.