docx_template_dart
一个Docx模板引擎
从模板文件生成docx。
为了使用该库,您需要学习如何在Microsoft Word中插入和编辑内容控件标签。不支持LibreOffice和其他办公程序,因为它们没有内容控件标签系统。
为此,请转到项目存储库并下载模板文件 template.docx
然后用Microsoft Word打开文件,转到程序设置并启用开发人员模式。您可能需要重新启动程序。之后,开发人员选项卡将可用。
为了使标签可见,您需要在开发人员选项卡中启用“设计模式”,要查看和编辑标签参数,您需要选择标签,然后在开发人员选项卡上单击“属性”按钮。
要创建标签,您需要使用开发人员选项卡上的“Aa”按钮,单击该按钮将打开一个窗口,其中:TAG字段可以是以下列表中的一个:list,table,text,plain,img。TITLE字段是标签的名称,它将被传递给Content类的构造函数。
例如:如果我们设置标签为‘list’,标题为‘cars’,那么我们必须使用相应的 ListContent ('cars', [*这里是内容*])
对于‘text’标签和标题为‘block_name’,我们使用:TextContent('block_name', '示例文本') 等。
支持的标签列表
- list – 列表,可以包含以下标签:text,plain
- table – 表格行
- text – 简单的文本字段
- plain – 一个可以包含文本、表格、图片、列表的块,如果将其包装在列表标签中,可以重复几次
- img – 带图片的块,可以在文本中使用或在表格内部使用
示例
final f = File("template.docx");
final docx = await DocxTemplate.fromBytes(await f.readAsBytes());
/*
Or in the case of Flutter, you can use rootBundle.load, then get bytes
final data = await rootBundle.load('lib/assets/users.docx');
final bytes = data.buffer.asUint8List();
final docx = await DocxTemplate.fromBytes(bytes);
*/
// Load test image for inserting in docx
final testFileContent = await File('test.jpg').readAsBytes();
final listNormal = ['Foo', 'Bar', 'Baz'];
final listBold = ['ooF', 'raB', 'zaB'];
final contentList = <Content>[];
final b = listBold.iterator;
for (var n in listNormal) {
b.moveNext();
final c = PlainContent("value")
..add(TextContent("normal", n))
..add(TextContent("bold", b.current));
contentList.add(c);
}
Content c = Content();
c
..add(TextContent("docname", "Simple docname"))
..add(TextContent("passport", "Passport NE0323 4456673"))
..add(TableContent("table", [
RowContent()
..add(TextContent("key1", "Paul"))
..add(TextContent("key2", "Viberg"))
..add(TextContent("key3", "Engineer"))
..add(ImageContent('img', testFileContent)),
RowContent()
..add(TextContent("key1", "Alex"))
..add(TextContent("key2", "Houser"))
..add(TextContent("key3", "CEO & Founder"))
..add(ListContent("tablelist", [
TextContent("value", "Mercedes-Benz C-Class S205"),
TextContent("value", "Lexus LX 570")
]))
..add(ImageContent('img', testFileContent))
]))
..add(ListContent("list", [
TextContent("value", "Engine")
..add(ListContent("listnested", contentList)),
TextContent("value", "Gearbox"),
TextContent("value", "Chassis")
]))
..add(ListContent("plainlist", [
PlainContent("plainview")
..add(TableContent("table", [
RowContent()
..add(TextContent("key1", "Paul"))
..add(TextContent("key2", "Viberg"))
..add(TextContent("key3", "Engineer")),
RowContent()
..add(TextContent("key1", "Alex"))
..add(TextContent("key2", "Houser"))
..add(TextContent("key3", "CEO & Founder"))
..add(ListContent("tablelist", [
TextContent("value", "Mercedes-Benz C-Class S205"),
TextContent("value", "Lexus LX 570")
]))
])),
PlainContent("plainview")
..add(TableContent("table", [
RowContent()
..add(TextContent("key1", "Nathan"))
..add(TextContent("key2", "Anceaux"))
..add(TextContent("key3", "Music artist"))
..add(ListContent(
"tablelist", [TextContent("value", "Peugeot 508")])),
RowContent()
..add(TextContent("key1", "Louis"))
..add(TextContent("key2", "Houplain"))
..add(TextContent("key3", "Music artist"))
..add(ListContent("tablelist", [
TextContent("value", "Range Rover Velar"),
TextContent("value", "Lada Vesta SW Sport")
]))
])),
]))
..add(ListContent("multilineList", [
PlainContent("multilinePlain")
..add(TextContent('multilineText', 'line 1')),
PlainContent("multilinePlain")
..add(TextContent('multilineText', 'line 2')),
PlainContent("multilinePlain")
..add(TextContent('multilineText', 'line 3'))
]))
..add(TextContent('multilineText2', 'line 1\nline 2\n line 3'))
..add(ImageContent('img', testFileContent));
final d = await docx.generate(c);
final of = File('generated.docx');
if (d != null) await of.writeAsBytes(d);