使用DinkToPDF生成PDF时JPEG图片被旋转的问题求助
DinkToPDF生成PDF时JPEG图片横向显示问题(浏览器/表单中显示正常)
我在用DinkToPDF生成PDF时碰到个问题:上传的JPEG图片在PDF里是横向渲染的,但在编辑表单的img标签里、直接用浏览器打开存储的JPEG文件时都是正常的纵向。不确定是DinkToPDF本身的问题,还是图片展示/存储方式的问题。
相关代码
PDF展示的HTML代码
@model Report @{...}
渲染PDF的C#代码
public async Task<ReturnFile> CreatePDF(Report report, Controller controller) {...}
图片上传处理代码
public async Task CreateReportPhotos(int Id, List<IFormFile> files, Report report) {...}
更新:我找到一个GitHub线程描述了相同问题,但里面的解决方案都不管用。
可行的排查与解决方向
- 处理图片EXIF方向信息
大部分JPEG图片携带的EXIF方向标记,浏览器能自动识别并旋转显示,但wkhtmltopdf(DinkToPDF的底层依赖)对这个标记的解析存在问题。可以在上传阶段就修正图片的实际像素方向,同时移除或重置EXIF方向标签。
用ImageSharp库处理示例:
using SixLabors.ImageSharp; using SixLabors.ImageSharp.Processing; public async Task ProcessUploadedImage(IFormFile file) { using var image = Image.Load(file.OpenReadStream()); // 自动根据EXIF信息旋转图片,并清除方向标记 image.Mutate(x => x.AutoOrient()); // 保存处理后的图片到存储位置 await image.SaveAsync("处理后的图片路径"); }
- 在HTML中强制指定图片尺寸
生成PDF的HTML里,给img标签明确设置width、height属性,或者用CSS固定尺寸,避免wkhtmltopdf自动推断图片方向:
<img src="@Model.PhotoUrl" width="600" height="800" style="object-fit: contain;"/>
升级DinkToPDF依赖的wkhtmltopdf版本
如果当前使用的是旧版DinkToPDF,对应的wkhtmltopdf版本可能存在已知bug,尝试升级到最新稳定版,看是否修复了方向解析问题。临时转换图片格式
将JPEG转换为PNG格式后再用于生成PDF,PNG不支持EXIF方向标记,能绕过wkhtmltopdf的解析问题。
内容的提问来源于stack exchange,提问作者BoMerican
相关产品推荐
相关产品推荐

