如何在不进行服务器端处理的情况下使用 Flutter 替换 DOCX 文件中的占位符?

问题描述 投票:0回答:1

我正在尝试使用 Flutter 以编程方式将 DOCX 文件中的占位符替换为特定文本,而不依赖于任何服务器端处理。我需要直接在 Flutter 应用程序中使用文本“Deepak Kumar”更新占位符 {name}。

我的文档如下所示

在此输入图片描述

我已经尝试使用

docx_template
包来操作 DOCX 文件,但仍然遇到错误和限制。我考虑过使用
flutter_quill
进行编辑,但它不支持直接 DOCX 操作。我正在寻找一个仅适用于 Flutter 的解决方案,不涉及服务器端处理。

这是我尝试操作 DOCX 文件的 Flutter 代码的简化版本:

import 'package:flutter/services.dart';
import 'package:docx_template/docx_template.dart';

void _loadAndDisplayDocx() async {
  try {
    final ByteData? data = await rootBundle.load('assets/docs/template.docx');
    if (data == null) {
      debugPrint("Failed to load the DOCX file.");
      return;
    }

    final Uint8List bytes = data.buffer.asUint8List();
    if (bytes.isEmpty) {
      debugPrint("DOCX file is empty after loading.");
      return;
    }

    final DocxTemplate docx = await DocxTemplate.fromBytes(bytes);
    if (docx == null) {
      debugPrint("Failed to initialize the DOCX template.");
      return;
    }

    final Content content = Content()..add(TextContent("name", "Deepak Kumar"));
    final List<int>? docGenerated = await docx.generate(content);
    if (docGenerated == null) {
      debugPrint("Failed to generate the document.");
      return;
    }

    final Directory directory = await getApplicationDocumentsDirectory();
    final File file = File('${directory.path}/output.docx');
    await file.writeAsBytes(docGenerated);
    final String? openResult = await OpenFile.open(file.path);
    if (openResult != "done") {
      debugPrint("Failed to open the document: $openResult");
    }
  } catch (e) {
    debugPrint("Error generating or opening document: $e");
  }
}

我遇到的错误

生成或打开文档时出错:对空值使用空检查运算符

flutter dart flutter-dependencies docx
1个回答
0
投票

我也在尝试做类似的事情,但到目前为止还没有解决方案。 您能解决这个问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.