我的用例 -:我有一个字符串,我想将其添加到空的Word文档中。基本上,我想创建一个新单词 docx 并将该字符串添加到其中,并且也能够共享它。
使用的代码 -:
static Future<void> createDocx(String docText) async {
print(docText);
final data = await rootBundle.load('assets/docFile/docfile.docx');
final bytes = data.buffer.asUint8List();
var docx = await DocxTemplate.fromBytes(bytes);
print(docx);
Content c = Content();
c
..add(TextContent("content", "hi my name is yashi"))
..add(TextContent('name', 'yashi'));
print('Content object: $c');
// Generate the document with replaced variables
try {
print('hiii');
final docGenerated =
await docx.generate(c, tagPolicy: TagPolicy.saveText);
print('hi2');
final directory = await getApplicationDocumentsDirectory();
final filePath = '${directory.path}/output.docx';
print(filePath);
final file = File(filePath);
if (docGenerated != null) await file.writeAsBytes(docGenerated);
await Share.shareXFiles([XFile(filePath)]);
print('Document created: $filePath');
} catch (e) {
print('Error generating document: $e');
}
}
控制台输出 -: I/flutter (14867):“DocxTemplate”实例 I/flutter (14867):内容对象:{内容:{},名称:{}} 我/颤振(14867):hiii I/flutter (14867):生成文档时出错:不支持的操作:无法修改不可修改的列表
(它也可以正确打印docText)
我不明白为什么内容对象中内容和名称的值为空。 请告诉我哪里出了问题。
也欢迎其他一些实现所需用例的方法。
谢谢。
您正在尝试修改不可修改的列表。当 docx 模板或传递到 Content 类的数据与预期结构不匹配时,就会发生这种情况。
几个建议:
${content}
${name}
^ 确保您的 docfile.docx 包含这样的占位符。
使用
TagPolicy.removeUnmatched
删除未使用的占位符。这将有助于过滤掉不匹配的。
看看这样的东西是否有效(你可能需要稍微修改一下,我已经详细注释掉了它的大部分功能以帮助 jic)
import 'dart:io';
import 'package:flutter/services.dart';
import 'package:docx_template/docx_template.dart';
import 'package:path_provider/path_provider.dart';
import 'package:share_plus/share_plus.dart';
Future<void> createDocx(String docText) async {
try {
// Load the Word template from assets
final data = await rootBundle.load('assets/docFile/docfile.docx');
final bytes = data.buffer.asUint8List();
// Initialize the DocxTemplate
var docx = await DocxTemplate.fromBytes(bytes);
// Define content for the placeholders
Content c = Content()
..add(TextContent("content", docText)) // Maps to `${content}` in template
..add(TextContent("name", "yashi")); // Maps to `${name}` in template
// Generate the document with the replaced variables
final docGenerated = await docx.generate(c, tagPolicy: TagPolicy.removeUnmatched);
// Save the generated document to the application's document directory
if (docGenerated != null) {
final directory = await getApplicationDocumentsDirectory();
final filePath = '${directory.path}/output.docx';
final file = File(filePath);
await file.writeAsBytes(docGenerated);
// Share the generated document
await Share.shareXFiles([XFile(filePath)]);
print('Document created and shared: $filePath');
}
} catch (e) {
print('Error generating document: $e');
}
}