【问题标题】:Generate PDF with iTextSharp - multiple images saved in List<string> - C#使用 iTextSharp 生成 PDF - 多个图像保存在 List<string> - C#
【发布时间】:2022-12-10 17:57:55
【问题描述】:

我有一个 asp.net webform 项目,我在其中使用 iTextSharp 从保存在数据库中的数据生成 pdf 文档。一切都很完美,除非我需要生成我的图像,保存在一个列表字符串中。我放置了一个断点,我正在读取数据,但每次它都会在 Image.GetInstance(item) 部分抛出错误。如果我这样离开它,它会抛出一个错误 System.IO.PathTooLongException: '指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。'我也试过将项目转换为字符串,但它说找不到路径。我什至尝试将整个列表转换为列表字节,但我遇到了同样的错误。我在数据库中的列表字符串看起来像这样的格式:

ImgList:[“904u3jg8orut390jgg”,“09re8im09mj3895gh”,“509tgj390h359”]。

我尝试并用谷歌搜索了每一个错误,但我找不到解决方案。我什至尝试在 Windows 中启用 longpath,但它对我不起作用。如果有人能帮助我,我将不胜感激。这是我的代码。

编辑: 我认为问题在于拆分和替换字符。当我将字符串添加到列表中时,我得到了一个额外的引号和反斜杠,像这样包裹在“\”... \“”中。我试过修剪、替换字符,但没有成功。我试图将 imgList = imgList.Select(s =&gt; s.Replace("\"", string.Empty)).ToList(); 更改为 imgList = imgList.Select(s =&gt; s.Replace("\\b\"", string.Empty)).ToList(); 但它没有用。有什么帮助吗?

 //getting data from database
 string strList = dt.Rows[0]["imgList"].ToString();
 List<string> imgList = new List<string>(strList.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries));
 imgList = imgList.Select(s => s.Replace("\"", string.Empty)).ToList();
 imgList = imgList.Select(s => s.Replace("[", string.Empty)).ToList();
 imgList = imgList.Select(s => s.Replace("]", string.Empty)).ToList();
 
//assign the value
pdf.ImageList = imgList;

//using iTextSharp  
  foreach (var item in pdf.ImageList)
        {
           if (item.Count() >= 1)
               {
            Image image = Image.GetInstance(item);
           }
         }

【问题讨论】:

  • 您需要提供更多信息。错误似乎很明确 - 路径/文件名太长。您要参考什么路径?您没有与我们分享您保存这些文件的路径。数据库中包含图像名称的列的长度是多少?
  • 它在 postgresql 中保存为 jsonb @bartosz-olchowik
  • 数据库中的图像是什么格式?您的 string strList = dt.Rows[0]["imgList"].ToString(); 使该数据库条目成为一个字符串,无论它最初是什么......
  • @mkl 那些图像已上传,HttpPostedFile 在 byte[] 来自 Binary Reader 并转换为 ToBase64String byte[]
  • “那些图像是……并转换为 ToBase64String byte[]”- 因此这些图像是 base64 编码的...因此您必须再次对数据库内容进行 bas64 解码才能获取图像字节数组。然后将这些图像字节数组输入Image.GetInstance

标签: c# arraylist webforms itext pdf-generation


【解决方案1】:

在您提到的评论中:

这些图像已上传,HttpPostedFile 位于 Binary Reader 的 byte[] 中,并转换为 ToBase64String byte[]

所以这些图像是 base64 编码的...因此您必须再次对数据库内容进行 base64 解码以获取图像字节数组。然后你可以将这些图像字节数组输入Image.GetInstance

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多