在ASP.NET MVC中使用NReco.PdfGenerator生成PDF时图片加载失败求助
解决NReco.PdfGenerator导出PDF时远程图片不显示的问题
刚上手NReco.PdfGenerator遇到图片加载失败的情况挺常见的,结合你给出的错误提示,我整理了几个针对性的解决办法,你可以挨个试试:
检查服务器的网络访问权限
你的图片是远程HTTPS链接,首先要确认运行代码的服务器/环境能正常访问这个URL。比如在服务器上用命令行工具(如curl)测试能不能获取到图片内容,如果服务器处于内网或者有防火墙限制,会导致wkhtmltopdf(NReco底层依赖的工具)无法拉取远程资源。
如果需要通过代理访问外网,你可以给PdfGenerator设置代理:var pdfConverter = new HtmlToPdfConverter(); pdfConverter.Proxy = new WebProxy("http://your-proxy-address:port"); // 如果代理需要认证 pdfConverter.Proxy.Credentials = new NetworkCredential("proxy-user", "proxy-pass");改用本地图片资源(最稳妥的方案)
远程图片容易受网络、权限影响,建议把图片下载到你的项目本地目录,然后用本地路径引用。比如把图片放在项目的wwwroot/images文件夹下,修改img标签为:<img src="~/images/donald_sign.jpg" />然后给PdfGenerator设置允许访问本地资源的基础路径:
var pdfConverter = new HtmlToPdfConverter(); // 映射到项目根目录的物理路径 var basePath = HttpContext.Current.Server.MapPath("~/"); pdfConverter.CustomWkHtmlArgs += $" --allow {basePath}";调整wkhtmltopdf的HTTPS相关参数
有些旧版本的wkhtmltopdf对现代TLS协议支持不好,或者会严格校验SSL证书。你可以添加自定义参数强制指定TLS版本,或者临时忽略SSL错误(仅测试用,生产环境不建议忽略):var pdfConverter = new HtmlToPdfConverter(); // 指定TLS 1.2协议,忽略SSL错误 pdfConverter.CustomWkHtmlArgs += " --ssl-protocol TLSv1.2 --ignore-ssl-errors true";验证图片URL的有效性
直接在浏览器或者服务器上访问图片链接,确认图片能正常加载,没有404、权限拦截(比如需要登录才能访问)的情况。如果URL需要认证,你可以给请求添加自定义头部:var pdfConverter = new HtmlToPdfConverter(); pdfConverter.CustomWkHtmlArgs += " --custom-header Authorization \"Bearer your-auth-token\"";
内容的提问来源于stack exchange,提问作者MFARKAN
相关产品推荐
相关产品推荐

