LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

【C#】免费开源 Word 模板引擎 MiniWord .NET

admin
2024年7月16日 18:24 本文热度 914

介绍

MiniWord .NET Word模板引擎,藉由Word模板和数据简单、快速生成文件。

Getting Started

安装

快速入门

模板遵循“所见即所得”的设计,模板和标签的样式会被完全保留

var value = new Dictionary<string, object>(){["title"] = "Hello MiniWord"};

MiniSoftware.MiniWord.SaveAsByTemplate(outputPath, templatePath, value);

输入、输出

  • 输入系统支持模版路径或是Byte[]

  • 输出支持文件路径、Byte[]、Stream

SaveAsByTemplate(string path, string templatePath, Dictionary<string, object> value)

SaveAsByTemplate(string path, byte[] templateBytes, Dictionary<string, object> value)

SaveAsByTemplate(this Stream stream, string templatePath, Dictionary<string, object> value)

SaveAsByTemplate(this Stream stream, byte[] templateBytes, Dictionary<string, object> value)

标签

MiniWord 使用类似 Vue, React 的模版字串 {{tag}},只需要确保 tag 与 value 参数的 key 一样(大小写敏感),系统会自动替换字串。

文本

{{tag}}
代码例子

var value = new Dictionary<string, object>()

{

    ["Name"] = "Jack",

    ["Department"] = "IT Department",

    ["Purpose"] = "Shanghai site needs a new system to control HR system.",

    ["StartDate"] = DateTime.Parse("2022-09-07 08:30:00"),

    ["EndDate"] = DateTime.Parse("2022-09-15 15:30:00"),

    ["Approved"] = true,

    ["Total_Amount"] = 123456,

};

MiniWord.SaveAsByTemplate(path, templatePath, value);

模版

导出

图片

标签值为 MiniWordPicture 类别

代码例子

var value = new Dictionary<string, object>()

{

    ["Logo"] = new MiniWordPicture() { Path= PathHelper.GetFile("DemoLogo.png"), Width= 180, Height= 180 }

};

MiniWord.SaveAsByTemplate(path, templatePath, value);

模版

导出

列表

标签值为 string[] 或是 IList<string>类别

代码例子

var value = new Dictionary<string, object>(){

    ["managers"] = new[] { "Jack","Alan"},

    ["employees"] = new[] { "Mike","Henry"},};MiniWord.SaveAsByTemplate(path, templatePath, value);

模版

导出

表格

标签值为 IEmerable<Dictionary<string,object>>类别

代码例子

var value = new Dictionary<string, object>()

{

    ["TripHs"] = new List<Dictionary<string, object>>

    {

        new Dictionary<string, object>

        {

            { "sDate",DateTime.Parse("2022-09-08 08:30:00")},

            { "eDate",DateTime.Parse("2022-09-08 15:00:00")},

            { "How","Discussion requirement part1"},

            { "Photo",new MiniWordPicture() { Path = PathHelper.GetFile("DemoExpenseMeeting02.png"), Width = 160, Height = 90 }},

        },

        new Dictionary<string, object>

        {

            { "sDate",DateTime.Parse("2022-09-09 08:30:00")},

            { "eDate",DateTime.Parse("2022-09-09 17:00:00")},

            { "How","Discussion requirement part2 and development"},

            { "Photo",new MiniWordPicture() { Path = PathHelper.GetFile("DemoExpenseMeeting01.png"), Width = 160, Height = 90 }},

        },

    }

};

MiniWord.SaveAsByTemplate(path, templatePath, value);

模版

导出

二级列表

Tag 是 IEnumerable<MiniWordForeach> 类别. 使用方式{{foreach 和 endforeach}}.

Example

var value = new Dictionary<string, object>()

{

    ["TripHs"] = new List<Dictionary<string, object>>

    {

        new Dictionary<string, object>

        {

            { "sDate", DateTime.Parse("2022-09-08 08:30:00") },

            { "eDate", DateTime.Parse("2022-09-08 15:00:00") },

            { "How", "Discussion requirement part1" },

            {

                "Details", new List<MiniWordForeach>()

                {

                    new MiniWordForeach()

                    {

                        Value = new Dictionary<string, object>()

                        {

                            {"Text", "Air"},

                            {"Value", "Airplane"}

                        },

                        Separator = " | "

                    },

                    new MiniWordForeach()

                    {

                        Value = new Dictionary<string, object>()

                        {

                            {"Text", "Parking"},

                            {"Value", "Car"}

                        },

                        Separator = " / "

                    }

                }

            }

        }

    }

};

MiniWord.SaveAsByTemplate(path, templatePath, value);

Template

Result

条件判断

@if 和 @endif tags .

Example

var value = new Dictionary<string, object>()

{

    ["Name"] = new List<MiniWordHyperLink>(){

        new MiniWordHyperLink(){

            Url = "https://google.com",

            Text = "測試連結22!!"

        },

        new MiniWordHyperLink(){

            Url = "https://google1.com",

            Text = "測試連結11!!"

        }

    },

    ["Company_Name"] = "MiniSofteware",

    ["CreateDate"] = new DateTime(2021, 01, 01),

    ["VIP"] = true,

    ["Points"] = 123,

    ["APP"] = "Demo APP",

};

MiniWord.SaveAsByTemplate(path, templatePath, value);

Template

Result

多彩字体

代码例子

var value = new

{

    Company_Name = new MiniWordColorText { Text = "MiniSofteware", FontColor = "#eb70AB", },

    Name = new[] {

        new MiniWordColorText { Text = "Ja", HighlightColor = "#eb70AB" },

        new MiniWordColorText { Text = "ck", HighlightColor = "#a56abe" }

    },

    CreateDate = new MiniWordColorText

    {

        Text = new DateTime(2021, 01, 01).ToString(),

        HighlightColor = "#eb70AB",

        FontColor = "#ffffff",

    },

    VIP = true,

    Points = 123,

    APP = "Demo APP",

};

MiniWord.SaveAsByTemplate(path, templatePath, value);

其他

POCO or dynamic 参数

v0.5.0 支持 POCO 或 dynamic parameter

var value = new { title = "Hello MiniWord" };

MiniWord.SaveAsByTemplate(outputPath, templatePath, value);

字体FontColor和HighlightColor

var value = new

{

    Company_Name = new MiniWordColorText { Text = "MiniSofteware", FontColor = "#eb70AB" },

    Name = new MiniWordColorText { Text = "Jack", HighlightColor = "#eb70AB" },

    CreateDate = new MiniWordColorText { Text = new DateTime(2021, 01, 01).ToString(), HighlightColor = "#eb70AB", FontColor = "#ffffff" },

    VIP = true,

    Points = 123,

    APP = "Demo APP",

};

HyperLink

我们可以尝试使用 MiniWodrHyperLink 类,用模板测试替换为超链接。

MiniWordHyperLink 提供了两个主要参数。

  • Url: HyperLink URI 目标路径

  • 文字:超链接文字

var value = new 

{

    ["Name"] = new MiniWordHyperLink(){

        Url = "https://google.com",

        Text = "測試連結!!"

    },

    ["Company_Name"] = "MiniSofteware",

    ["CreateDate"] = new DateTime(2021, 01, 01),

    ["VIP"] = true,

    ["Points"] = 123,

    ["APP"] = "Demo APP",

};

MiniWord.SaveAsByTemplate(path, templatePath, value);

例子

ASP.NET Core 3.1 API Export

using Microsoft.AspNetCore.Builder;

using Microsoft.AspNetCore.Hosting;

using Microsoft.AspNetCore.Mvc;

using Microsoft.Extensions.DependencyInjection;

using Microsoft.Extensions.Hosting;

using System;

using System.Collections.Generic;

using System.IO;

using System.Net;

using MiniSoftware;


public class Program

{

    public static void Main(string[] args) => CreateHostBuilder(args).Build().Run();


    public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());

}


public class Startup

{

    public void ConfigureServices(IServiceCollection services) => services.AddMvc();

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

    {

        app.UseStaticFiles();

        app.UseRouting();

        app.UseEndpoints(endpoints =>

        {

            endpoints.MapControllerRoute(

                name: "default",

                pattern: "{controller=api}/{action=Index}/{id?}");

        });

    }

}


public class ApiController : Controller

{

    public IActionResult Index()

    {

        return new ContentResult

        {

            ContentType = "text/html",

            StatusCode = (int)HttpStatusCode.OK,

            Content = @"<html><body>

<a href='api/DownloadWordFromTemplatePath'>DownloadWordFromTemplatePath</a><br>

<a href='api/DownloadWordFromTemplateBytes'>DownloadWordFromTemplateBytes</a><br>

</body></html>"

        };

    }


    static Dictionary<string, object> defaultValue = new Dictionary<string, object>()

    {

        ["title"] = "FooCompany",

        ["managers"] = new List<Dictionary<string, object>> {

            new Dictionary<string, object>{{"name","Jack"},{ "department", "HR" } },

            new Dictionary<string, object> {{ "name", "Loan"},{ "department", "IT" } }

        },

        ["employees"] = new List<Dictionary<string, object>> {

            new Dictionary<string, object>{{ "name", "Wade" },{ "department", "HR" } },

            new Dictionary<string, object> {{ "name", "Felix" },{ "department", "HR" } },

            new Dictionary<string, object>{{ "name", "Eric" },{ "department", "IT" } },

            new Dictionary<string, object> {{ "name", "Keaton" },{ "department", "IT" } }

        }

    };


    public IActionResult DownloadWordFromTemplatePath()

    {

        string templatePath = "TestTemplateComplex.docx";


        Dictionary<string, object> value = defaultValue;


        MemoryStream memoryStream = new MemoryStream();

        MiniWord.SaveAsByTemplate(memoryStream, templatePath, value);

        memoryStream.Seek(0, SeekOrigin.Begin);

        return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.wordprocessingml.document")

        {

            FileDownloadName = "demo.docx"

        };

    }


    private static Dictionary<string, Byte[]> TemplateBytesCache = new Dictionary<string, byte[]>();


    static ApiController()

    {

        string templatePath = "TestTemplateComplex.docx";

        byte[] bytes = System.IO.File.ReadAllBytes(templatePath);

        TemplateBytesCache.Add(templatePath, bytes);

    }


    public IActionResult DownloadWordFromTemplateBytes()

    {

        byte[] bytes = TemplateBytesCache["TestTemplateComplex.docx"];


        Dictionary<string, object> value = defaultValue;


        MemoryStream memoryStream = new MemoryStream();

        MiniWord.SaveAsByTemplate(memoryStream, bytes, value);

        memoryStream.Seek(0, SeekOrigin.Begin);

        return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.wordprocessingml.document")

        {

            FileDownloadName = "demo.docx"

        };

    }

}


该文章在 2024/7/16 18:38:03 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved