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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:15:28