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

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

NET如何按模板导出Word

低光图像增强算法-基于Pytorch的Retinex Net实现
加载中
低光图像增强算法-基于Pytorch的Retinex Net实现

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

相关推荐

  • 服务器4g内存安什么系统比较好,4g内存服务器装什么系统流畅

    对于仅有4GB内存的服务器,最佳操作系统选择是轻量级的Linux发行版,首选Debian或CentOS Stream/Rocky Linux(无图形界面模式),其次是Alpine Linux,坚决不建议安装Windows Server,除非有不可替代的特定软件需求,在4GB内存的硬件条件下,系统的“轻量化”与……

    2026年4月6日
    8900
  • ASP.NET编译后文件在哪?发布流程详解

    ASP.NET应用从源代码到高效运行的Web服务,经历了一个关键的编译过程,理解这一过程及其带来的影响,对于构建高性能、安全且易于维护的应用程序至关重要,ASP.NET编译的核心机制*源代码编译 (`.cs.vb到.dll`):**开发者编写的C#或VB.NET代码文件(类库、页面后台代码、控制器、模型等)首先……

    程序编程 2026年2月10日
    12900
  • 广电网络支持win7系统吗?广电网络能用win7吗

    广电网络完全支持Win7系统,但受限于微软停止安全更新及硬件驱动迭代,2026年使用需手动安装网卡驱动并承担潜在安全风险,广电网络与Win7的底层兼容逻辑网络协议的无缝通用广电网络提供的宽带服务,本质上基于标准的TCP/IP协议族,Win7系统原生内置了完整的网络协议栈,从PPPoE拨号到DHCP自动获取IP……

    2026年4月24日
    6500
  • 广州移动IPv6 VPS月付95折值得买吗,广州移动IPv6 VPS推荐

    CoalCloud炭云广州移动IPv6 VPS凭借极具竞争力的月付95折、季付9折及年付8折阶梯优惠,以16.6元/月的超低门槛提供1核1G内存、20GB SSD存储及200Mbps带宽,是追求高性价比与网络稳定性的理想选择,在云计算市场日益内卷的当下,寻找一款既便宜又稳定的VPS并非易事,许多用户往往在价格与……

    2026年6月28日
    1400
  • 如何快速查询可用AI域名?AI域名免费查询教程网站

    AI域名批量查询:高效抢占数字资产的智能解决方案核心结论:AI领域的爆发式增长使相关域名成为极具价值的数字资产,借助专业的AI域名批量查询工具,投资者和企业能够高效扫描海量域名数据,精准识别可用优质域名,大幅提升域名战略布局的效率和成功率,从而在激烈的市场竞争中抢占先机,AI域名为何成为必争之地?行业爆发红利……

    2026年2月16日
    16200
  • 广州语音合成模块生产厂哪家好?语音合成模块厂家直销推荐

    在2026年智能语音交互全面爆发的产业背景下,寻找优质的广州语音合成模块生产厂,核心在于考察其端侧算力优化能力、情感合成自然度以及本地化敏捷交付水平,具备全栈自研算法与柔性智造基础的源头工厂是降本增效的最优解,2026年语音合成模块产业格局与广州优势产业演进:从“能发声”到“高情商表达”根据【中国信通院】202……

    2026年4月26日
    4800
  • 服务器HA集群如何搭建?服务器高可用集群配置方法

    当单点故障发生时,业务仍能持续运行,RTO(恢复时间目标)趋近于零,RPO(数据丢失量)可控, 这不是理想化的承诺,而是通过标准化架构设计、自动化故障转移机制与严格运维流程共同实现的工程结果,在金融、医疗、政务、电商等对系统连续性要求严苛的领域,服务器HA集群已成为基础设施的标配,为什么需要服务器HA集群……

    2026年4月17日
    5000
  • 服务器CSS指示灯是什么意思?服务器指示灯闪烁原因解析

    服务器CSS指示灯是数据中心硬件状态监控的第一道防线,其核心价值在于通过可视化信号实现故障的毫秒级预警与定位,对于运维人员而言,读懂指示灯状态等同于掌握了服务器的“脉搏”,能够将平均修复时间(MTTR)降低30%以上,这一系统通过颜色编码、闪烁频率及常亮状态,精准映射硬件健康度,是保障业务连续性不可或缺的物理交……

    2026年4月3日
    8500
  • 如何有效使用aspx引入命名空间?探讨最佳实践与技巧?

    在ASP.NET Web Forms开发中,引入命名空间是连接页面标记与后台代码逻辑的关键桥梁,直接影响代码可读性、可维护性和开发效率,解决这一问题的核心方法是:在ASPX页面(.aspx 或 .ascx)的顶部使用 <%@ Import Namespace=”完整的命名空间路径” %> 指令,这是……

    2026年2月5日
    12230
  • ajax数据如何保存到数据库?ajax提交数据到数据库

    通过Ajax实现数据保存到数据库的核心在于利用JavaScript的XMLHttpRequest或Fetch API异步发送HTTP请求,后端接收数据后通过SQL语句执行写入,全程无需刷新页面即可反馈结果,Ajax数据保存到数据库的底层逻辑与流程拆解很多开发者在初次接触前后端分离时,容易将“保存数据”简单等同于……

    2026年6月2日
    3800

发表回复

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