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

相关推荐

  • 服务器ip地址如何自动获取?服务器自动获取ip地址的方法

    服务器IP地址自动获取IP地址的核心结论是:通过DHCP协议实现动态分配,既提升运维效率,又保障网络资源合理利用;但在关键业务场景中,仍需结合静态IP配置与监控机制,确保系统高可用性,为什么需要自动获取IP地址?在现代服务器部署中,手动配置IP地址存在三大痛点:效率低下:每台服务器需人工输入IP、子网掩码、网关……

    2026年4月15日
    3000
  • AIoT的智慧教育是什么,智慧教育解决方案有哪些

    AIoT技术正在深度重塑教育生态,其核心价值在于通过万物互联与人工智能的深度融合,实现教育资源的精准配置、教学过程的个性化定制以及校园管理的智能化升级,最终构建起一个以人为本、数据驱动的智慧教育新范式, 核心价值:打破数据孤岛,实现精准教育传统教育模式长期面临“数据孤岛”与“千人一面”的困境,校园内各类硬件设备……

    2026年3月21日
    7200
  • AIoT是哪里生产的汽车,AIoT汽车是哪个厂家制造的

    AIoT并非一个独立的汽车品牌,而是指融合了人工智能(AI)与物联网(IoT)技术的智能汽车生态系统,核心结论是:不存在名为“AIoT”的单一汽车制造商,所谓的“AIoT汽车”是由具备强大科技背景的车企或跨界科技巨头生产的,它们利用智能互联技术,将汽车打造为移动的智能终端, 这类汽车的生产模式,正从传统的机械制……

    2026年3月20日
    7700
  • ASP.NET市场前景如何?2026年发展趋势与就业分析

    ASP.NET作为微软构建现代Web应用和服务的核心框架,凭借其强大的技术栈、成熟的生态系统和持续的创新,在企业级应用开发、云服务及高性能Web解决方案领域占据着稳固且重要的市场地位,其核心价值在于为开发者提供了高效、安全、可扩展的平台,满足从初创企业到大型组织的多样化需求,ASP.NET的核心优势与市场立足点……

    程序编程 2026年2月11日
    14530
  • AIoT需要多少钱?AIoT项目开发成本预算大概多少

    AIoT项目的落地成本并非一个固定的数字,而是一个跨度极大的区间,通常从数十万元的小型试点项目到数千万元的企业级全场景覆盖不等,核心结论在于:AIoT的投入成本主要由硬件感知层、网络传输层、平台搭建层以及算法应用层四大部分构成,其中软件算法与系统集成的隐性成本往往被低估, 企业在规划预算时,不应仅盯着硬件采购价……

    2026年3月9日
    10700
  • ASP.NET读取Excel哪种方法好?三种读取教程详解

    在ASP.NET开发中高效读取Excel数据常见三种方法:使用OleDb连接字符串直接查询、借助EPPlus开源库解析或通过NPOI组件处理,下面通过完整代码示例详解实现方案,OleDb连接器(适合简单数据提取)原理:将Excel文件视为数据库,通过ADO.NET执行SQL查询// 连接字符串需区分Excel版……

    2026年2月8日
    9130
  • RackNerd美国VPS测评,10.88美元/年实测数据与性能表现,RackNerd美国VPS怎么样,RackNerd美国VPS测评

    RackNerd 2026 年 10.88 美元/年 VPS 实测结论:该套餐在基础性能上完全满足个人博客、轻量级爬虫及测试环境需求,但在高并发场景下表现平庸,是预算敏感型用户的首选入门方案,但需接受其网络波动较大的现实,在 2026 年的云主机市场中,RackNerd 依然凭借极致的性价比占据着“入门级 VP……

    2026年5月10日
    1600
  • 服务器2008进程如何定时自动重启?服务器2008进程定时重启方法和配置步骤

    服务器2008进程定时重启是保障系统稳定运行、规避内存泄漏与资源耗尽风险的关键运维策略,尤其适用于长期运行的业务系统,通过科学设定定时重启机制,可显著降低服务中断概率,提升整体可用性与响应性能,以下从必要性、实施原则、具体方案、风险规避及运维建议五个维度展开说明,提供可落地的专业解决方案,为何必须实施进程定时重……

    程序编程 2026年4月16日
    2800
  • 服务器 256g 内存卡多少钱?256G 内存条价格及选购指南

    256GB 服务器内存卡(内存条)的市场价格区间通常在 800 元至 3500 元人民币之间,具体价格取决于内存代数(DDR4/DDR5)、频率、容量颗粒品牌(如三星、海力士、镁光)、是否支持 ECC 纠错以及购买渠道的正规性,对于企业级用户而言,单纯关注单价是低效的决策方式,服务器内存的核心价值在于稳定性、纠……

    程序编程 2026年4月19日
    2500
  • 服务器cpu一直满载怎么办?服务器CPU占用率高原因与解决方法

    服务器CPU持续满载通常是系统架构缺陷、代码逻辑错误或遭遇异常流量的综合表现,必须立即进行资源隔离与瓶颈定位,否则将导致服务雪崩,解决这一问题的核心逻辑在于:从顶层架构到底层代码进行全链路排查,区分是业务增长带来的正常压力还是系统故障引发的异常消耗,并采取针对性的垂直或水平扩展策略,同时优化软件层面的执行效率……

    2026年4月11日
    3200

发表回复

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