日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

DocTemplateTool - 可根据模板生成word或pdf文件的工具

發(fā)布時間:2023/11/16 windows 56 coder
生活随笔 收集整理的這篇文章主要介紹了 DocTemplateTool - 可根据模板生成word或pdf文件的工具 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

你是否經(jīng)常遇到這樣的場景:產(chǎn)品運(yùn)營有著大量的報(bào)告需求,或者給客戶領(lǐng)導(dǎo)展現(xiàn)每周的運(yùn)營報(bào)告?這些文檔類的任務(wù)可以交給運(yùn)營同事,他們負(fù)責(zé)文檔排版和樣式,你作為開發(fā)人員你只需要提供數(shù)據(jù)源,和一個映射表,告訴制作文檔的人哪些字段可供使用。這樣一來分工明確,減少了很多不必要的溝通成本。

Document Template Tool

指定一個模板生成word或pdf文件

運(yùn)行單元測試以查看示例!

功能 & 特點(diǎn)

  • 基于占位符的模板,可繼承原有樣式;
  • 支持表格;
  • 支持?jǐn)?shù)據(jù)集合;
  • 支持圖片;
  • 提供Cli版本程序;
  • 可擴(kuò)展的接口封裝和組件。

快速開始

使用Cli

進(jìn)入可執(zhí)行文件所在目錄,在命令提示符中運(yùn)行DocTemplateTool.exe

參數(shù)列表:

參數(shù) 含義 用法
-p PatternFile 指定一個Object文件(Json), 作為數(shù)據(jù)源件
-i Input 指定一個docx文件作為模板
-o Output 指定一個路徑,作為導(dǎo)出目標(biāo)
-s Source 值為json
-d Destination 值為word, pdf
-w WaitAtEnd 指定時,程序執(zhí)行完成后,將等待用戶輸入退出
-h Help 查看幫助

示例

.\wtt.exe -p .\sample\data.json -i .\sample\template.docx -o .\output\test.docx -s json -d word

使用DocTemplateTool.Word類庫

在項(xiàng)目中引用DocTemplateTool.Word

dotnet add package DocTemplateTool.Word

由于Exporter返回的NPOI對象,你需要自行根據(jù)業(yè)務(wù)來處理結(jié)果,以及處理IO異常

byte[] docFileContent;

var docinfo = GetDocInfo(); // 準(zhǔn)備數(shù)據(jù)
var result = Exporter.ExportDocxByObject("D:\\Template.docx", docinfo); //生成NPOI文檔對象

//處理結(jié)果
using (var memoryStream = new MemoryStream())
{
    result.Write(memoryStream);
    memoryStream.Seek(0, SeekOrigin.Begin);
    docFileContent = memoryStream.ToArray();
}

//寫入文件或返回接口
File.WriteAllBytes("D:\\Result.docx", docFileContent);

占位符

占位符是指在模板中的一個標(biāo)記,用于標(biāo)記需要替換的文本或圖片,
文本占位符的格式為:$字段名稱[附加屬性]$
圖片占位符的格式為:#字段名稱[附加屬性]#

Exporter將掃描文檔中所有占位符,然后根據(jù)占位符的名稱,從數(shù)據(jù)源中獲取對應(yīng)的文本值或圖片內(nèi)容,替換到文檔中。

文本

例如

姓名:$ClientName$

將被替換為

姓名:張三

圖片

確認(rèn)大小

圖片占位符支持附加屬性,用于指定圖片的寬度和高度,格式為:#字段名稱[寬度,高度]#

#Graphic[431,266]#

將被替換為一個寬度為431,高度為266的圖片,單位為像素。
若不指定寬度和高度,則使用默認(rèn)圖片尺寸556*262。
在Word文檔中,因?yàn)橄袼卮笮∈莻€相對值,頁面視圖100%時的大小為實(shí)際像素尺寸,你可以使用截圖工具或標(biāo)尺工具確認(rèn)圖片的大小。

設(shè)置圖片

圖片源支持本地文件和網(wǎng)絡(luò)圖片以及Base64編碼的圖片。

從不同圖片來源生成文檔的示例運(yùn)行如下:

數(shù)據(jù)集合

由于NPOI限制,暫不支持表格的嵌套。
數(shù)據(jù)集合將以表格的形式呈現(xiàn)在文檔中,因此你需要在模板中預(yù)留一個表格,Exporter將根據(jù)表中單元格的占位符,填充表格各列的內(nèi)容。
包含占位符的行稱之為模板行。

定義

public class HealthReportDocInfo
{
    ...
    public List<DetailList> BloodPressureList { get; set; }
}

public class DetailList
{
    public string Name { get; set; }
    public string Dept { get; set; }
    public string Value { get; set; }
    public string Result { get; set; }
}

配置模板表格:

默認(rèn)以第二行作為模板行(通常第一行為表頭),你也可以根據(jù)實(shí)際情況跳過表頭,

例如在工資登記表示例中,表頭占兩行的情況下,第三行為模板行,那么你需要在配置中指定模板行的索引為2(索引從0開始)。

$Details[2]$

模板行的樣式將決定表格的樣式,因此你可以在模板行中設(shè)置表格的樣式,例如設(shè)置表格的字體,顏色,大小等。

示例運(yùn)行如下圖:

其他示例

企業(yè)員工健康管理周報(bào)

心電圖報(bào)告

數(shù)據(jù)源

數(shù)據(jù)源支持從哈希表(字典)或?qū)ο笾蝎@取數(shù)據(jù)。

Exporter提供了ExportDocxByDictionary和ExportDocxByObject兩個方法,分別用于從哈希表和對象中獲取數(shù)據(jù)。

從哈希表中獲取數(shù)據(jù):

var docinfo = new Dictionary<string, object>()
{
    {"Dept", "XX科技股份有限公司" },
    {"Date",  DateTime.Now     },
    {"Number",  "憑 - 202301111"     },
    {"Details",  new List<Dictionary<string, object>>(){

        new Dictionary<string, object>(){
            { "Type","銷售收款"},
            { "Name","應(yīng)收款"},
            { "DeptorAmount",0},
            { "LenderAmount",50000}
        },
            new Dictionary<string, object>(){
            { "Type","銷售收款"},
            { "Name","預(yù)收款"},
            { "DeptorAmount",30000},
            { "LenderAmount",0}
        },
        new Dictionary<string, object>(){
            { "Type","銷售收款"},
            { "Name","現(xiàn)金"},
            { "DeptorAmount",20000},
            { "LenderAmount",0}
        },

    }},
    { "DeptorSum",  50000     },
    { "LenderSum",  50000     },
    { "ClientName",  "XX科技股份有限公司"     },
    { "Teller",  "張三"     },
    { "Maker",  "李四"     },
    { "Auditor",  "王五"     },
    { "Register",  "趙六"     },
};
var result = Word.Exporter.ExportDocxByDictionary(Path.Combine(templatePath_Doc, $"AccountingTemplate.docx"), docinfo, (s) => s);


從匿名對象中獲取數(shù)據(jù):

var docinfo = new
{

    Dept = "XX科技股份有限公司",
    Date = DateTime.Now,
    Number = "憑 - 202301111",
    Details = new List<dynamic>() {

        new
        {
            Type = "銷售收款",
            Name = "應(yīng)收款",
            DeptorAmount = 0,
            LenderAmount = 50000
        },
        new
        {
            Type = "銷售收款",
            Name = "預(yù)收款",
            DeptorAmount = 30000,
            LenderAmount = 0
        },
        new
        {
            Type = "銷售收款",
            Name = "現(xiàn)金",
            DeptorAmount = 20000,
            LenderAmount = 0
        },
    },
    DeptorSum = 50000,
    LenderSum = 50000,
    ClientName = "XX科技股份有限公司",
    Teller = "張三",
    Maker = "李四",
    Auditor = "王五",
    Register = "趙六",
};

var result = Word.Exporter.ExportDocxByObject(Path.Combine(templatePath_Doc, $"AccountingTemplate.docx"), docinfo, (s) => s);

它們將得到同樣的結(jié)果:

已知問題

作者信息

作者:林小

郵箱:jevonsflash@qq.com

License

The MIT License (MIT)

項(xiàng)目地址

Github:DocTemplateTool

總結(jié)

以上是生活随笔為你收集整理的DocTemplateTool - 可根据模板生成word或pdf文件的工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。