You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发环境下Java生成PDF时JPG图片未加载问题求助

排查开发环境下OpenHtmlToPdf加载图片失败的问题

先看你碰到的具体报错:

com.openhtmltopdf.exception WARNING:: IO problem for https://180.151.248.194:20505/resources/logo.jpg

还有你生成图片路径的代码:

path=request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ request.getContextPath() + "/resources/logo.jpg";

结合本地正常、开发环境异常的情况,我给你梳理几个大概率能解决问题的排查方向:

  • 先查开发环境的网络连通性
    本地环境里,应用和图片资源要么在同一机器要么在同一局域网,访问毫无压力,但开发环境可能有各种网络限制:

    • 服务器的防火墙/安全组没开20505端口,导致OpenHtmlToPdf的渲染引擎连不上这个HTTPS地址;
    • 应用所在的服务器根本ping不通180.151.248.194这个IP(比如内部网络做了隔离)。
      最快的验证方式是在开发环境的服务器上跑个命令测试:
    curl -k https://180.151.248.194:20505/resources/logo.jpg
    

    加-k是跳过HTTPS证书校验——毕竟用IP地址搭的HTTPS服务,大概率是自签名证书,直接访问会被拒。

  • 检查HTTPS证书的信任问题
    OpenHtmlToPdf访问HTTPS资源时,会严格校验证书合法性。如果开发环境用的是自签名证书,而JVM的信任库没导入这个证书,必然会触发IO异常。
    解决办法有两个:

    1. 把自签名证书导入到开发环境JVM的cacerts信任库中(步骤网上一搜就有,注意JDK版本对应的路径);
    2. 开发环境临时绕过证书校验(生产绝对不能这么干!),可以自定义OpenHtmlToPdf的UserAgentCallback来忽略证书错误。
  • 确认路径生成逻辑的环境差异
    你用request.getServerName()和request.getServerPort()拼路径,得确认开发环境里这些参数拿的对不对:

    • 比如开发环境有没有配置反向代理(像Nginx),导致request.getServerPort()拿到的是代理的端口,而不是实际资源服务的20505?
    • 再检查request.getContextPath()在开发环境和本地是不是一致,有没有多打或者少打路径片段。
      最简单的办法是在开发环境里把生成的path变量打出来,对比一下和你手动能访问的图片URL是不是完全一致。
  • 调整OpenHtmlToPdf的资源加载配置
    有时候OpenHtmlToPdf默认的资源加载策略不支持某些HTTPS配置,比如TLS版本太低。你可以试试自定义FSSupplier,或者调整HtmlConverter的配置,指定它支持的TLS版本(比如TLS 1.2)。

内容的提问来源于stack exchange,提问作者pradeep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:12:02