ASP.NET如何按模板导出Word/PDF?实例代码详解|ASP.NET模板导出Word/PDF实例

在ASP.NET中按指定模板导出Word和PDF文档,可通过OpenXML(Word)和QuestPDF(PDF)实现高效解决方案,以下是完整实现步骤:

NET如何按模板导出Word


Word导出实现(OpenXML)

核心流程:克隆模板文档 → 替换占位符 → 保存文件

// 安装NuGet包:DocumentFormat.OpenXml
public IActionResult ExportWord()
{
    string templatePath = "Templates/report_template.docx";
    string outputPath = "Output/report_output.docx";
    // 克隆模板文件
    System.IO.File.Copy(templatePath, outputPath, true);
    // 打开文档修改内容
    using (WordprocessingDocument doc = WordprocessingDocument.Open(outputPath, true))
    {
        var body = doc.MainDocumentPart.Document.Body;
        foreach (var text in body.Descendants<Text>())
        {
            // 替换模板标记
            if (text.Text.Contains("{CustomerName}"))
                text.Text = text.Text.Replace("{CustomerName}", "张三科技有限公司");
            if (text.Text.Contains("{ReportDate}"))
                text.Text = text.Text.Replace("{ReportDate}", DateTime.Now.ToString("yyyy-MM-dd"));
        }
    }
    return PhysicalFile(outputPath, "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
}

关键技术点

NET如何按模板导出Word

  1. 模板制作:在Word中直接插入{CustomerName}等标记
  2. 动态表格:通过Table类遍历添加行数据
  3. 样式保留:修改文本不影响原始格式

PDF导出实现(QuestPDF)

推荐方案:使用现代库QuestPDF替代iTextSharp(避免AGPL许可问题)

// 安装NuGet包:QuestPDF
public IActionResult ExportPdf()
{
    var invoice = new InvoiceModel(
        invoiceNumber: "INV-2026-085",
        customerName: "李四集团",
        items: new List<InvoiceItem> {
            new ("网站开发", 2, 9800),
            new ("服务器托管", 12, 650)
        });
    var document = Document.Create(container =>
    {
        container.Page(page =>
        {
            page.Content().Column(column =>
            {
                column.Item().Text($"发票号: {invoice.InvoiceNumber}");
                column.Item().PaddingTop(20).Table(table =>
                {
                    table.ColumnsDefinition(columns =>
                    {
                        columns.RelativeColumn();
                        columns.RelativeColumn();
                        columns.RelativeColumn();
                    });
                    table.Header(header =>
                    {
                        header.Cell().Text("项目");
                        header.Cell().Text("数量");
                        header.Cell().Text("单价");
                    });
                    foreach (var item in invoice.Items)
                    {
                        table.Cell().Text(item.Name);
                        table.Cell().Text(item.Quantity.ToString());
                        table.Cell().Text(item.Price.ToString("C"));
                    }
                });
            });
        });
    });
    var stream = new MemoryStream();
    document.GeneratePdf(stream);
    stream.Position = 0;
    return File(stream, "application/pdf", "invoice.pdf");
}

进阶技巧

  1. 动态图片插入
    // Word中插入图片
    var imagePart = mainPart.AddImagePart(ImagePartType.Jpeg);
    using (var stream = new FileStream("logo.jpg", FileMode.Open))
    {
     imagePart.FeedData(stream);
    }
    var drawing = new Drawing(
     new DW.Inline(
         new DW.Extent() { Cx = 500000, Cy = 200000 },
         new DW.DocProperties() { Id = 1U, Name = "Logo" },
         new Graphic(new GraphicData(
             new PIC.Picture(
                 new PIC.NonVisualPictureProperties(...)
             ) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" }
         )
     )
    );
  2. PDF模板复用
    // 复用已有PDF模板
    container.Page(page =>
    {
     page.Background().Image("background.jpg");
     page.Content().Element(new InvoiceTemplate(invoice));
    });

性能优化方案

操作类型 优化建议 效果提升
大数据量导出 分页生成+流式写入 内存降低70%+
高频访问场景 启用内存缓存输出结果 响应速度提升3倍
复杂模板 预编译模板结构 生成速度提升50%

企业级解决方案

graph LR
A[数据库] --> B[.NET Core服务]
B --> C{导出类型}
C -->|Word| D[OpenXML模板引擎]
C -->|PDF| E[QuestPDF渲染器]
D --> F[Azure Blob存储]
E --> F
F --> G[CDN分发]

安全增强措施

NET如何按模板导出Word

  1. 文件校验:添加SHA256数字指纹
  2. 防注入:清理模板中的XML特殊字符
  3. 访问控制:基于JWT的下载权限验证

遇到具体场景需要帮助?欢迎在评论区留言
问题示例:

  1. 如何在Word模板中处理动态表格合并单元格?
  2. 百万级数据导出怎样避免内存溢出?
  3. 如何实现PDF中的跨页表格表头重复?

首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/22910.html

(0)
上一篇 2026年2月11日 04:55
下一篇 2026年2月11日 04:58

相关推荐

  • 如何解决ASP.NET Ajax UpdatePanel回传后滚动条位置变化?-ASP.NET Ajax滚动条固定技巧

    ASP.NET Ajax UpdatePanel 回传后滚动条位置变更解决方法解决ASP.NET Ajax UpdatePanel异步回发后滚动条位置重置的核心方案是:利用ScriptManager的MaintainScrollPositionOnPostBack属性结合自定义JavaScript,通过捕获并恢……

    程序编程 2026年2月9日
    6550
  • AI技术全面场景化落地实践怎么做?人工智能应用场景有哪些?

    AI技术全面场景化落地实践的核心在于将抽象的算法能力转化为具体的业务价值,实现从技术验证到商业变现的闭环,企业必须摒弃“为技术而技术”的思维,转而采用“场景驱动”的战略,通过精准匹配业务痛点、优化数据资产与构建敏捷组织,才能在激烈的市场竞争中确立优势,成功的落地不仅仅是模型的部署,更是一场涉及数据治理、流程再造……

    2026年2月20日
    13500
  • AIoT的复杂性问题有哪些,AIoT系统如何解决复杂性难题

    AIoT(人工智能物联网)的本质是人工智能技术与物联网基础设施的深度融合,这一融合在创造巨大商业价值的同时,也引入了前所未有的系统复杂性,核心结论在于:AIoT的复杂性问题并非单一维度的技术堆叠,而是源于“端-边-云”协同的异构性、数据流转的非线性以及安全边界的模糊性, 解决这一问题,不能仅依靠硬件性能的提升……

    2026年3月10日
    4700
  • ASP.NET伪静态如何设置中文URL?SEO优化大流量技巧

    在ASP.NET网站中实现伪静态中文URL的核心解决方案是:通过URL重写技术配合正确的编码处理,将中文字符转换为符合RFC标准的百分号编码格式,同时确保服务器端能正确解码,具体实施需结合IIS URL Rewrite模块与.NET编码处理机制,并针对百度爬虫进行特殊优化,中文URL的技术原理与挑战RFC标准限……

    2026年2月10日
    6400
  • AIoT的崛起视频哪里能看?AIoT行业发展现状解析

    AIoT(人工智能物联网)的崛起标志着智能经济从概念走向落地,其核心驱动力在于“智能”与“连接”的深度融合,实现了从万物互联到万物智联的跨越,这一进程不仅重塑了传统产业形态,更构建了数据驱动决策的底层逻辑,对于企业和投资者而言,理解AIoT的关键在于把握边缘计算能力的提升、5G技术的普及以及行业场景化应用的爆发……

    2026年3月9日
    5200
  • AIoT龙头有哪些?2026年AIoT行业龙头股名单一览

    AIoT(智能物联网)行业已进入高速发展期,核心结论是:AIoT龙头有哪些?答案集中在小米集团、华为、百度、腾讯、阿里云等科技巨头,以及涂鸦智能、科大讯飞、海康威视等垂直领域领军企业,这些企业凭借技术积累、生态布局和商业化能力,成为行业标杆,科技巨头:生态布局领先小米集团以“手机+AIoT”双引擎战略为核心,连……

    2026年3月11日
    6600
  • ASP.NET新闻列表如何批量生成静态页? | 静态页面SEO优化技巧

    在ASP.NET应用中为新闻列表和详情页生成静态HTML文件是提升性能、增强SEO和减轻服务器负载的经典策略,实现这一目标的核心在于灵活运用批量生成与单页按需生成两种模式,根据实际场景选择最优解或组合使用, 静态化的核心价值与技术原理性能飞跃: 静态HTML文件无需经过ASP.NET页面生命周期、数据库查询、服……

    2026年2月12日
    5610
  • aix系统下查看所有业务端口,aix如何查看端口占用情况

    在AIX操作系统运维管理中,快速、准确地掌握系统端口占用情况是保障业务连续性和排查网络故障的核心技能,核心结论是:在AIX系统下查看所有业务端口,最有效的方法是组合使用netstat命令与lsof工具,配合进程ID(PID)精准定位业务程序,而非仅仅查看端口号, 单纯的端口列表缺乏业务属性,只有将端口与进程、应……

    2026年3月14日
    5400
  • 如何实现响应式布局?ASP.NET布局教程详解

    在ASP.NET开发中,布局是构建一致、高效Web应用的核心技术,它通过统一页面结构和内容复用,提升开发效率和用户体验,ASP.NET提供了多种布局方案,如母版页(Master Pages)用于Web Forms,布局页(Layout Pages)用于MVC框架,帮助开发者管理头部、尾部、导航等共享元素,确保站……

    2026年2月11日
    5800
  • AI人工智能是干什么的?人工智能有哪些应用领域?

    AI人工智能的核心本质是利用计算机系统模拟、延伸和扩展人类的智能行为,其根本目的在于通过算法与数据的结合,以极高的效率解决传统人力难以处理的复杂问题,从而实现生产力的飞跃与生活方式的变革,它并非简单的自动化程序,而是一种能够通过学习数据进行自我进化、具备感知、推理、决策能力的底层技术基础设施,正在重塑各行各业的……

    2026年3月3日
    5100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注