Flutter文档处理或展示插件docutain_sdk的使用
Flutter文档处理或展示插件docutain_sdk的使用
简介
Docutain SDK for Flutter 是一个强大的工具,用于在Flutter应用程序中实现自动文档扫描、数据捕获、图像处理、OCR文本识别、智能数据提取和PDF创建等功能。它完全离线工作,确保了数据的最大安全性。
该SDK包含以下可单独授权的模块:
- Document Scanner SDK:用于文档扫描。
- OCR SDK for text recognition:用于文本识别。
- Data Capture and Extraction 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
更多关于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(); // 占位符
}
},
),
),
);
}
}
注意
- API假设:上面的代码示例基于假设
docutain_sdk
有一个initialize
方法和loadAndShowDocument
方法。实际使用时,你需要参考docutain_sdk
的官方文档来确认正确的API和方法。 - 错误处理:在实际应用中,你可能需要更详细的错误处理和用户反馈机制。
- 平台特定实现:一些文档处理或展示功能可能依赖于原生平台代码。确保你遵循
docutain_sdk
的指南来添加和配置必要的原生依赖。
由于docutain_sdk
不是Flutter社区广泛认知的插件,具体的API和实现细节可能会有所不同。因此,强烈建议查阅docutain_sdk
的官方文档和示例代码来获取最准确的信息。