如何使用iTextSharp将TIFF字节数组转换为PDF字节数组?解决转换异常
解决iTextSharp将TIFF字节数组转PDF时的MemoryStream报错/损坏问题
我之前也踩过iTextSharp处理TIFF转PDF的坑,你遇到的内存流报错和PDF损坏问题,大概率是这几个常见原因导致的,给你整理了修复方案和完整代码:
常见问题根源
- 多页TIFF未正确遍历:TIFF可能包含多页,直接处理单页会导致PDF内容缺失或损坏
- MemoryStream位置未重置:写入PDF后没把流的
Position设为0,后续读取时会从流的末尾开始,拿到空数据 - 图像资源未释放:
System.Drawing.Image使用后没调用Dispose(),导致内存泄漏或流被锁定引发报错 - iTextSharp图像加载方式错误:直接从字节数组创建Image对象可能解析异常,建议通过Stream加载
修正后的完整代码
using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using iTextSharp.text; using iTextSharp.text.pdf; public byte[] ConvertTiffToPdf(byte[] tiffBytes) { using (var tiffStream = new MemoryStream(tiffBytes)) using (var outputStream = new MemoryStream()) { // 初始化PDF文档 var document = new Document(); PdfWriter.GetInstance(document, outputStream); document.Open(); try { // 加载TIFF图像,支持多页 using (var tiffImage = Image.FromStream(tiffStream)) { int pageCount = tiffImage.GetFrameCount(FrameDimension.Page); for (int i = 0; i < pageCount; i++) { tiffImage.SelectActiveFrame(FrameDimension.Page, i); // 将System.Drawing.Image转换为iTextSharp的Image对象 using (var pageStream = new MemoryStream()) { tiffImage.Save(pageStream, ImageFormat.Png); // 转成PNG避免TIFF解析问题 pageStream.Position = 0; var pdfImage = iTextSharp.text.Image.GetInstance(pageStream); // 适配PDF页面大小,保持比例 pdfImage.ScaleToFit(document.PageSize.Width - 20, document.PageSize.Height - 20); pdfImage.Alignment = Element.ALIGN_CENTER; document.Add(pdfImage); if (i != pageCount - 1) document.NewPage(); // 最后一页无需新增空页 } } } } finally { document.Close(); } // 重置输出流位置,确保能读取到完整的PDF字节 outputStream.Position = 0; return outputStream.ToArray(); } }
关键修复点说明
- using语句包裹所有流和图像:确保资源自动释放,避免内存泄漏和流锁定问题
- 遍历TIFF所有页面:通过
GetFrameCount和SelectActiveFrame处理多页TIFF,同时避免最后一页生成空页 - 中间转PNG格式:规避iTextSharp直接解析TIFF时的兼容性问题
- 重置MemoryStream的Position:写入完成后必须把位置设为0,否则
ToArray()会返回空数组或不完整数据 - 适配PDF页面大小:防止图像超出页面范围导致PDF显示异常
如果还是报错,可以检查:
- TIFF字节数组是否完整(有没有传输或读取时的截断)
- iTextSharp的版本是否过时,建议更新到最新稳定版
- 系统是否缺少GDI+相关依赖(影响
System.Drawing.Image的处理)
内容的提问来源于stack exchange,提问作者Charles Hleas
相关产品推荐
相关产品推荐

