stevenjin 2025-01-24 16:35 采纳率: 96.8%
浏览 3
已结题

用Magicodes.IE.Pdf导出为列表时报错

用Magicodes.IE.Pdf导出数据列表,原代码不是一个集合,被我改为list之后报错,求正确方法。
报错如下:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:“Cannot implicitly convert type 'Magicodes.ExporterAndImporter.Core.Models.ExportDocumentInfo<System.Collections.Generic.List<WebApplication1.Person>>' to 'System.Collections.IEnumerable'. An explicit conversion exists (are you missing a cast?)”


 public async Task<FileResult> Export()
 {
     try
     {
   

         Person resumeDescription1 = new Person
         {
             Id = 1,
             Name = "张三",
             Gender = "男",
             Birthday = Convert.ToDateTime("1995-05-22"),
             Mobile = "18888888888",
             University = "华中科技大学",
             Education = "硕士研究生",
             Major = "计算机科学技术",
             Nation = "汉族",
             MarriageStaus = "已婚",
             Occupation = "砖厂搬砖",
             FreshStudent = "否",
             VisitDate = Convert.ToDateTime("2017-07-01"),
             CurrentCompanyName = "王多鱼谁有梦想投资有限公司",
             Resignation = "梦想都实现了,现想找一份端茶调水双休五险一金不是996的软件公司",
             Profile = "本人精通Word、Excel、Access、Power Point、Outlook Express等软件的安装与卸载     熟练掌握VB、C++、FoxPro、SQL、java 等单词的拼写熟悉 Win7、WindowsPhone、Linux、Mac、Android、IOS、Blackberry等操作系统的开关机!",
             Evaluate = "C#是世界上最好的语言",
             FurImg = $"{_webHostEnvironment.WebRootPath}\\Images\\001.jpg",
             AnalysisReport = $"{_webHostEnvironment.WebRootPath}\\Images\\002.jpg"
         };

         Person resumeDescription2 = new Person
         {
             Id = 1,
             Name = "张三",
             Gender = "男",
             Birthday = Convert.ToDateTime("1995-05-22"),
             Mobile = "18888888888",
             University = "华中科技大学",
             Education = "硕士研究生",
             Major = "计算机科学技术",
             Nation = "汉族",
             MarriageStaus = "已婚",
             Occupation = "砖厂搬砖",
             FreshStudent = "否",
             VisitDate = Convert.ToDateTime("2017-07-01"),
             CurrentCompanyName = "王多鱼谁有梦想投资有限公司",
             Resignation = "梦想都实现了,现想找一份端茶调水双休五险一金不是996的软件公司",
             Profile = "本人精通Word、Excel、Access、Power Point、Outlook Express等软件的安装与卸载     熟练掌握VB、C++、FoxPro、SQL、java 等单词的拼写熟悉 Win7、WindowsPhone、Linux、Mac、Android、IOS、Blackberry等操作系统的开关机!",
             Evaluate = "C#是世界上最好的语言",
             FurImg = $"{_webHostEnvironment.WebRootPath}\\Images\\001.jpg",
             AnalysisReport = $"{_webHostEnvironment.WebRootPath}\\Images\\002.jpg"
         };
         List<Person> people = new List<Person>();
         people.Add(resumeDescription1);
         people.Add(resumeDescription2);
         var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "Template", "PdfTemplate.cshtml");
         var tpl = System.IO.File.ReadAllText(tplPath);
         var exporter = new PdfExporter();
         string fileName = $"{Guid.NewGuid().ToString()}.pdf";
         string downloadName = $"{Path.Combine(Directory.GetCurrentDirectory())}\\{fileName}";
         var result = await exporter.ExportByTemplate(downloadName,
          people, tpl);
         //因为生成的模板默认在当前项目下,需要移动到wwwroot
         System.IO.File.Move(result.FileName, $"{_webHostEnvironment.WebRootPath}\\Download\\{fileName}");

         string addrUrl = $"{_webHostEnvironment.WebRootPath}\\Download\\{fileName}";
         var stream = System.IO.File.OpenRead(addrUrl);
         return File(stream, result.FileType, Path.GetFileName(addrUrl));
     }
     catch (Exception ex)
     {
         var stream = System.IO.File.OpenRead(null);
         return File(stream, "application/vnd.android.package-archive");
     }
 }


@using WebApplication1

<!DOCTYPE html>
<html>
@model List<Person>
<HY.WebUI.Model.ActuatorViewModel>
<head>
    <meta charset='UTF-8'>
    <title></title>
    <style>
        body {
            margin: 0;
            padding: 0;
            min-width: 1080px;
        }

        .m_table {
            border-collapse: separate;
            margin: 20px auto 0;
            min-width: 1900px;
            text-align: center;
            font: 500 17px '微软雅黑';
            border-spacing: 0;
            border: 1px solid #EBEEF5;
        }

            .m_table th {
                background-color: #F7F3F7;
            }

            .m_table th,
            .m_table td {
                border-right: 1px solid #EBEEF5;
                border-bottom: 1px solid #EBEEF5;
                padding: 5px;
                height: 60px;
                width: 60px;
            }
    </style>
</head>
<body>
        <table class='m_table'>
           @*  <tr>
                <th colspan='8' style='text-align:center;font-size:25px;'> @(Model.Data.Name)的简历</th>
            </tr> *@
            <tr>
                <th colspan='8' style='text-align:left;font-size:18px;'>个人信息</th>
            </tr>
             @for (int i = 0; i < @Model.Count; i++)
            {
                 <tr>
                    <td> 姓名:</td>

                    <td> @Model[i].Name </td>
                    <td> 性别: </td>

                <td> @Model[i].Gender </td>
                    <td> 出生: </td>

               </tr>
            }              
        </table>
</body>
</html>

    [Exporter(Name = "个人简历")]
    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public DateTime Birthday { get; set; }
        public string Mobile { get; set; }

        public string University { get; set; }
        public string Education { get; set; }
        public string Major { get; set; }
        public string Nation { get; set; }

        public string MarriageStaus { get; set; }
        public string Occupation { get; set; }
        public string FreshStudent { get; set; }
        public DateTime VisitDate { get; set; }
        public string CurrentCompanyName { get; set; }
        public string Resignation { get; set; }
        public string Profile { get; set; }
        public string Evaluate { get; set; }

        public string FurImg { get; set; }
        public string AnalysisReport { get; set; }






    }
  • 写回答

2条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你的描述和代码来看,你已经成功将Person对象添加到一个列表people中,并尝试使用Magicodes.IE.Pdf库来导出这个列表。然而,你在使用模板导出时遇到了问题。根据你提供的代码,问题可能出在以下几个方面:

    1. 在模板中,你使用了@Model.Count来遍历列表中的每一项,但在Razor视图中,你应该使用foreach循环来遍历列表,而不是使用for循环。这是因为foreach循环可以自动获取每个元素的值,而不需要手动指定索引。你应该修改你的模板代码为以下格式:
    <body>
        <table class='m_table'>
            <tr>
                <th colspan='8' style='text-align:left;font-size:18px;'>个人信息</th>
            </tr>
            @foreach(var person in Model)
            {
                <tr>
                    <td> 姓名:</td>
                    <td> @person.Name </td>
                    <td> 性别: </td>
                    <td> @person.Gender </td>
                    <!-- 其他属性类似 -->
                </tr>
            }              
        </table>
    </body>
    

    这样你就可以正确地遍历列表中的每一项并显示出来了。

    另外,请确保你的模板文件路径是正确的,并且文件内容是有效的Razor视图代码。同时确保模板文件的读取权限正确。在出现异常的情况下,你的代码在捕获异常的地方仅仅返回了一个文件流,这可能会导致无法正确返回生成的PDF文件。你可能需要更详细地处理异常并返回适当的错误信息或者引导用户重新尝试生成PDF文件。希望这些信息能帮助你解决问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月1日
  • 已采纳回答 1月24日
  • 修改了问题 1月24日
  • 修改了问题 1月24日
  • 展开全部