网站空间数据库,网站js跳转,中国建设银行手机网站下载,自己如何开发一个app你是否经常遇到这样的场景#xff1a;产品运营有着大量的报告需求#xff0c;或者给客户领导展现每周的运营报告#xff1f;这些文档类的任务可以交给运营同事#xff0c;他们负责文档排版和样式#xff0c;你作为开发人员你只需要提供数据源#xff0c;和一个映射表产品运营有着大量的报告需求或者给客户领导展现每周的运营报告这些文档类的任务可以交给运营同事他们负责文档排版和样式你作为开发人员你只需要提供数据源和一个映射表告诉制作文档的人哪些字段可供使用。这样一来分工明确减少了很多不必要的沟通成本。
Document Template Tool
指定一个模板生成word或pdf文件 运行单元测试以查看示例
功能 特点
基于占位符的模板可继承原有样式支持表格支持数据集合支持图片提供Cli版本程序可扩展的接口封装和组件。
快速开始
使用Cli
进入可执行文件所在目录在命令提示符中运行DocTemplateTool.exe
参数列表:
参数含义用法-pPatternFile指定一个Object文件(Json), 作为数据源件-iInput指定一个docx文件作为模板-oOutput指定一个路径作为导出目标-sSource值为json-dDestination值为word, pdf-wWaitAtEnd指定时程序执行完成后将等待用户输入退出-hHelp查看帮助
示例
.\wtt.exe -p .\sample\data.json -i .\sample\template.docx -o .\output\test.docx -s json -d word使用DocTemplateTool.Word类库
在项目中引用DocTemplateTool.Word
dotnet add package DocTemplateTool.Word由于Exporter返回的NPOI对象你需要自行根据业务来处理结果以及处理IO异常
byte[] docFileContent;var docinfo GetDocInfo(); // 准备数据
var result Exporter.ExportDocxByObject(D:\\Template.docx, docinfo); //生成NPOI文档对象//处理结果
using (var memoryStream new MemoryStream())
{result.Write(memoryStream);memoryStream.Seek(0, SeekOrigin.Begin);docFileContent memoryStream.ToArray();
}//写入文件或返回接口
File.WriteAllBytes(D:\\Result.docx, docFileContent);
占位符
占位符是指在模板中的一个标记用于标记需要替换的文本或图片 文本占位符的格式为$字段名称[附加属性]$ 图片占位符的格式为#字段名称[附加属性]#
Exporter将扫描文档中所有占位符然后根据占位符的名称从数据源中获取对应的文本值或图片内容替换到文档中。
文本
例如
姓名$ClientName$将被替换为
姓名张三图片
确认大小
图片占位符支持附加属性用于指定图片的宽度和高度格式为#字段名称[宽度,高度]#
#Graphic[431,266]#将被替换为一个宽度为431高度为266的图片单位为像素。 若不指定宽度和高度则使用默认图片尺寸556*262。 在Word文档中因为像素大小是个相对值页面视图100%时的大小为实际像素尺寸你可以使用截图工具或标尺工具确认图片的大小。 设置图片
图片源支持本地文件和网络图片以及Base64编码的图片。 从不同图片来源生成文档的示例运行如下 数据集合
由于NPOI限制暂不支持表格的嵌套。 数据集合将以表格的形式呈现在文档中因此你需要在模板中预留一个表格Exporter将根据表中单元格的占位符填充表格各列的内容。 包含占位符的行称之为模板行。
定义
public class HealthReportDocInfo
{...public ListDetailList 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; }
}配置模板表格 默认以第二行作为模板行通常第一行为表头你也可以根据实际情况跳过表头
例如在工资登记表示例中表头占两行的情况下第三行为模板行那么你需要在配置中指定模板行的索引为2索引从0开始。
$Details[2]$模板行的样式将决定表格的样式因此你可以在模板行中设置表格的样式例如设置表格的字体颜色大小等。
示例运行如下图 其他示例
企业员工健康管理周报 心电图报告 数据源
数据源支持从哈希表字典或对象中获取数据。
Exporter提供了ExportDocxByDictionary和ExportDocxByObject两个方法分别用于从哈希表和对象中获取数据。
从哈希表中获取数据
var docinfo new Dictionarystring, object()
{{Dept, XX科技股份有限公司 },{Date, DateTime.Now },{Number, 凭 - 202301111 },{Details, new ListDictionarystring, object(){new Dictionarystring, object(){{ Type,销售收款},{ Name,应收款},{ DeptorAmount,0},{ LenderAmount,50000}},new Dictionarystring, object(){{ Type,销售收款},{ Name,预收款},{ DeptorAmount,30000},{ LenderAmount,0}},new Dictionarystring, object(){{ Type,销售收款},{ Name,现金},{ 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);
从匿名对象中获取数据
var docinfo new
{Dept XX科技股份有限公司,Date DateTime.Now,Number 凭 - 202301111,Details new Listdynamic() {new{Type 销售收款,Name 应收款,DeptorAmount 0,LenderAmount 50000},new{Type 销售收款,Name 预收款,DeptorAmount 30000,LenderAmount 0},new{Type 销售收款,Name 现金,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);它们将得到同样的结果 已知问题
作者信息
作者林小
邮箱jevonsflashqq.com
License
The MIT License (MIT)
项目地址
Github:DocTemplateTool