Flutter文档处理或展示插件docutain_sdk的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter文档处理或展示插件docutain_sdk的使用

简介

Docutain SDK for Flutter 是一个强大的工具,用于在Flutter应用程序中实现自动文档扫描、数据捕获、图像处理、OCR文本识别、智能数据提取和PDF创建等功能。它完全离线工作,确保了数据的最大安全性。

该SDK包含以下可单独授权的模块:

更多详情,请访问我们的网站 https://sdk.Docutain.com

如果你想要测试功能而不想编写任何代码,可以查看我们的 Showcase Apps

文档

官方文档 包含了所有你需要的信息来将 Docutain SDK 集成到你的 Flutter 应用程序中。如果你更喜欢通过示例项目学习,可以在 Github 上找到我们的 Docutain SDK Flutter 示例应用。

更新日志

每个版本的所有更改记录请参阅 Changelog

许可和支持

Docutain SDK 是一个商业产品,生产环境使用需要购买许可证。为了获取试用许可证,请访问 https://sdk.docutain.com/TrialLicense?Source=1800 生成试用许可证密钥。如果需要技术支持,请联系 support.sdk@Docutain.com

博客

我们还提供了博客文章,如 如何创建Flutter文档扫描器如何从头开始创建Flutter插件

示例代码

完整的示例demo

下面是一个完整的Flutter应用程序示例,演示了如何使用 docutain_sdk 插件进行文档扫描、处理以及展示结果。

import 'dart:io';
import 'package:docutain_sdk/docutain_sdk_document_datareader.dart';
import 'package:docutain_sdk/docutain_sdk_logger.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
import 'package:docutain_sdk/docutain_sdk.dart';
import 'package:docutain_sdk/docutain_sdk_ui.dart';
import 'package:docutain_sdk/docutain_sdk_document.dart';
import 'package:tuple/tuple.dart';
import 'package:open_file_plus/open_file_plus.dart';
import 'package:url_launcher/url_launcher.dart';

void main() {
  runApp(const MaterialApp(home: MyApp()));
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool _isDocutainPluginInitialized = false;

  @override
  void initState() {
    super.initState();
    initDocutainSdk();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('DocutainSDK'),
      ),
      body: Container(
        alignment: Alignment.center,
        padding: const EdgeInsets.all(16),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () async {
                var traceFile = await DocutainSdkLogger.getTraceFile();
                OpenFile.open(traceFile?.path);
              },
              child: const Text('GET TRACE FILE'),
            ),
            ElevatedButton(
              onPressed: () async {
                if (!_isDocutainPluginInitialized) {
                  _showSnackbar("Docutain SDK not initialized. Reason:\n${await DocutainSdk.getLastError()}");
                  return;
                }
                
                var scanConfig = DocumentScannerConfiguration();

                // 可选配置项
                // scanConfig.source = Source.galleryMultiple; // 从相册选择图片
                // 扫描界面颜色主题设置
                /*
                scanConfig.colorConfig.colorPrimary = const Tuple2<Color, Color>(Colors.purple, Colors.purple);
                scanConfig.colorConfig.colorSecondary = const Tuple2<Color, Color>(Colors.purple, Colors.purple);
                ...
                */

                // 启动文档扫描并等待结果
                bool rcScan = await DocutainSdkUi.scanDocument(scanConfig);
                if (!rcScan) {
                  _showSnackbar("User canceled scan process.");
                  return;
                }

                final pageCount = await DocutainSdkDocument.pageCount();
                final text = await DocutainSdkDocumentDataReader.getText();
                final data = await DocutainSdkDocumentDataReader.analyze();
                final directory = await getApplicationDocumentsDirectory();

                // 将扫描内容保存为PDF文件
                File? pdfFile = await DocutainSdkDocument.writePDF(directory.path, "testPDF");
                if (pdfFile != null) {
                  OpenFile.open(pdfFile.path);
                } else {
                  _showSnackbar("PDF creation failed. Reason:\n${await DocutainSdk.getLastError()}");
                }
              },
              child: const Text('START SCAN'),
            ),
          ],
        ),
      ),
    );
  }

  void initDocutainSdk() async {
    const licenseKey = "YOUR_LICENSE_KEY_HERE";
    bool isDocutainPluginInitialized = await DocutainSdk.initSDK(licenseKey);
    if (!isDocutainPluginInitialized) {
      if (licenseKey == "YOUR_LICENSE_KEY_HERE") {
        _showLicenseEmptyDialog();
      } else {
        _showLicenseErrorDialog(licenseKey);
      }
      String error = await DocutainSdk.getLastError();
    }

    var analyzeConfig = AnalyzeConfiguration();
    analyzeConfig.readBIC = true;
    analyzeConfig.readPaymentState = true;
    if (!await DocutainSdkDocumentDataReader.setAnalyzeConfiguration(analyzeConfig)) {
      String error = await DocutainSdk.getLastError();
    }

    await DocutainSdkLogger.setLogLevel(Level.verbose);

    if (!mounted) return;

    setState(() {
      _isDocutainPluginInitialized = isDocutainPluginInitialized;
    });
  }

  void _showSnackbar(String message) {
    SnackBar snackBar = SnackBar(content: Text(message));
    ScaffoldMessenger.of(context).showSnackBar(snackBar);
  }

  Future<void> _showLicenseEmptyDialog() async {
    return showDialog<void>(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text('License needed'),
          content: const SingleChildScrollView(
            child: ListBody(
              children: <Widget>[
                Text('You need a trial license in order to run this example. You can generate a trial license key on our website for free.'),
              ],
            ),
          ),
          actions: <Widget>[
            TextButton(
              child: const Text('Get trial license'),
              onPressed: () async {
                await launchUrl(Uri.parse('https://sdk.docutain.com/TrialLicense?Source=3277320'));
              },
            ),
          ],
        );
      },
    );
  }

  Future<void> _showLicenseErrorDialog(String licenseKey) async {
    return showDialog<void>(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text('License error'),
          content: const SingleChildScrollView(
            child: ListBody(
              children: <Widget>[
                Text('A valid license key is required. Please contact our support to get an extended trial license.'),
              ],
            ),
          ),
          actions: <Widget>[
            TextButton(
              child: const Text('Contact Support'),
              onPressed: () async {
                await launchUrl(Uri.parse('mailto:support.sdk@Docutain.com?subject=Trial License Error&body=Please keep your following trial license key in this e-mail: $licenseKey'));
              },
            ),
          ],
        );
      },
    );
  }
}

以上代码展示了如何集成 docutain_sdk 插件以实现文档扫描、处理和展示功能。你可以根据自己的需求调整配置参数和逻辑流程。希望这段代码能帮助你快速上手使用 Docutain SDK。


更多关于Flutter文档处理或展示插件docutain_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文档处理或展示插件docutain_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用docutain_sdk插件来处理或展示文档的示例代码。请注意,这个示例假设你已经将docutain_sdk插件添加到了你的pubspec.yaml文件中,并且已经运行了flutter pub get命令。

1. 添加依赖

首先,确保你的pubspec.yaml文件中包含docutain_sdk的依赖:

dependencies:
  flutter:
    sdk: flutter
  docutain_sdk: ^最新版本号 # 请替换为实际的最新版本号

2. 导入插件

在你的Dart文件中导入docutain_sdk

import 'package:docutain_sdk/docutain_sdk.dart';

3. 初始化SDK

通常,你可能需要在应用的入口点(如main.dart)初始化SDK。但具体初始化步骤可能依赖于docutain_sdk的文档和API。以下是一个假设的初始化示例:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 假设docutain_sdk有一个初始化方法
  await DocutainSdk.initialize();
  
  runApp(MyApp());
}

4. 使用SDK展示文档

假设docutain_sdk提供了一个方法来加载和展示文档,你可以在你的Widget中使用它。以下是一个示例Widget,用于展示PDF文档:

import 'package:flutter/material.dart';
import 'package:docutain_sdk/docutain_sdk.dart';

class DocumentViewer extends StatefulWidget {
  final String documentPath; // 文档的路径或URL

  DocumentViewer({required this.documentPath});

  @override
  _DocumentViewerState createState() => _DocumentViewerState();
}

class _DocumentViewerState extends State<DocumentViewer> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Document Viewer'),
      ),
      body: Center(
        child: FutureBuilder<void>(
          future: DocutainSdk.loadAndShowDocument(widget.documentPath), // 假设这是加载和展示文档的方法
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting) {
              return CircularProgressIndicator();
            } else if (snapshot.hasError) {
              return Text('Error loading document: ${snapshot.error}');
            } else {
              // 假设DocutainSdk.loadAndShowDocument会在内部处理UI展示
              // 如果不是,你可能需要返回一个自定义的文档查看Widget
              return Container(); // 占位符
            }
          },
        ),
      ),
    );
  }
}

注意

  1. API假设:上面的代码示例基于假设docutain_sdk有一个initialize方法和loadAndShowDocument方法。实际使用时,你需要参考docutain_sdk的官方文档来确认正确的API和方法。
  2. 错误处理:在实际应用中,你可能需要更详细的错误处理和用户反馈机制。
  3. 平台特定实现:一些文档处理或展示功能可能依赖于原生平台代码。确保你遵循docutain_sdk的指南来添加和配置必要的原生依赖。

由于docutain_sdk不是Flutter社区广泛认知的插件,具体的API和实现细节可能会有所不同。因此,强烈建议查阅docutain_sdk的官方文档和示例代码来获取最准确的信息。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!