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

用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>
<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: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>
</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; } 
    }
  • 写回答

4条回答 默认 最新

  • 关注

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

    报错的原因是你尝试将 ExportDocumentInfo<List<Person>> 对象直接转换为 IEnumerable 类型,这是不可能的。你需要从 ExportDocumentInfo 对象中获取实际的文件流或文件路径,然后将这个文件返回给用户。ExportDocumentInfo 是一个包含有关导出操作的信息的对象,如文件的类型、文件名和文件内容等。在 Magicodes.IE.Pdf 库中,你应该使用 ExportDocumentInfo 对象来获取导出的 PDF 文件的信息。

    以下是一个修改后的代码示例,你可以参考这个示例来修复你的代码:

    public async Task<IActionResult> Export()
    {
        try
        {
            // 创建人员列表
            List<Person> people = new List<Person>();
            people.Add(/*添加你的数据*/); // 此处你需要填充人员列表数据
    
            // 指定模板文件路径
            var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "Template", "PdfTemplate.cshtml");
            // 读取模板文件内容
            var tpl = System.IO.File.ReadAllText(tplPath);
            // 创建Pdf导出对象
            var exporter = new PdfExporter();
            // 执行导出操作,并获取导出的文件信息
            var result = await exporter.ExportByTemplate(null, people, tpl);
            if (result.Success) // 如果导出成功
            {
                // 创建文件结果对象,并设置文件内容、类型和名称等信息
                var fileResult = new FileResult();
                fileResult.FileType = result.FileType; // 文件类型
                fileResult.FileName = result.FileName; // 文件名,根据需要可以更改生成的文件名规则
                fileResult.ContentDisposition = "attachment"; // 设置Content-Disposition为attachment,以便浏览器下载文件而不是打开文件
                fileResult.Content = System.IO.File.OpenRead(result.FileName); // 文件内容,即导出的PDF文件流
                return fileResult; // 返回文件结果对象给前端用户下载文件
            }
            else // 如果导出失败,返回错误信息或者相应的处理结果
            {
                // 此处可以返回错误信息或者进行其他处理操作,比如重定向到错误页面等
            }
        }
        catch (Exception ex) // 异常处理部分代码可以根据实际情况进行修改和优化
        {
            // 记录异常信息或者进行其他处理操作,比如返回错误信息给前端用户等
        }
    }
    

    注意:上述代码中的 FileResult 类型是一个自定义类型,用于封装文件信息(如文件名、文件类型、文件内容等),并返回一个 FileResult 对象给前端用户下载文件。你需要根据你的项目实际情况来定义这个类型或者选择其他合适的方式来返回文件给前端用户。同时,请确保你的模板文件路径、模板内容和数据格式等都是正确的,以避免导出操作失败。

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

报告相同问题?

问题事件

  • 系统已结题 2月1日
  • 已采纳回答 1月24日
  • 修改了问题 1月24日
  • 创建了问题 1月24日