ASP.NET WebForm中iTextSharp处理List<string>图片生成PDF报错求助
问题解决方案
1. 用JSON解析替换手动字符串处理
你当前手动拆分、替换JSON格式字符串的方式极易出错(比如转义字符、残留符号处理不彻底),直接用JSON序列化库解析是更可靠的方案,推荐使用Newtonsoft.Json(可通过NuGet安装):
// 先引入Newtonsoft.Json命名空间 using Newtonsoft.Json; // 从数据库读取并解析JSON数组 string strList = dt.Rows[0]["imgList"].ToString(); List<string> imgList = JsonConvert.DeserializeObject<List<string>>(strList); // 直接赋值即可,无需后续的Replace操作 pdf.ImageList = imgList;
2. 修复Image.GetInstance的错误用法
你传入Image.GetInstance的item是类似904u3jg8orut390jgg的标识字符串,这不是本地文件路径,所以方法会把它当作路径去查找,自然抛出「路径不存在」或「路径过长」的错误。你需要根据这些字符串的实际含义处理:
情况1:字符串是图片的Base64编码
将Base64字符串转为字节数组后再生成Image:
foreach (var item in pdf.ImageList) { if (!string.IsNullOrEmpty(item)) { byte[] imageBytes = Convert.FromBase64String(item); Image image = Image.GetInstance(imageBytes); // 这里添加图片到PDF的逻辑 } }
情况2:字符串是数据库中图片记录的ID
根据ID从数据库查询对应的图片字节数据,再生成Image:
foreach (var item in pdf.ImageList) { if (!string.IsNullOrEmpty(item)) { // 假设你有根据ID获取图片字节的方法 byte[] imageBytes = GetImageBytesById(item); if (imageBytes != null && imageBytes.Length > 0) { Image image = Image.GetInstance(imageBytes); // 这里添加图片到PDF的逻辑 } } }
3. 原字符串处理无效的原因
数据库中存储的JSON字符串可能带有转义字符(比如实际存储内容是[\"904u3jg8orut390jgg\",...]),手动替换\"或"时会因为转义规则的问题处理不彻底,用JSON解析库能从根源避免这类问题。
内容的提问来源于stack exchange,提问作者Lindsay
相关产品推荐
相关产品推荐

