Flutter OCR编辑插件hocr_editor的使用
Flutter OCR编辑插件hocr_editor的使用
简介
hocr_editor
是一个用于 Flutter 的全屏小部件,它能够显示 HOCR(XML)文件,并与原始图像一起展示,允许用户编辑其中的文字。目前版本支持编辑单词和删除单词。未来计划将其扩展为一个完整的编辑器,支持手动添加新单词、搜索和合并块等功能。
依赖项
该插件使用了 dart_hocr
包来与 XML 文件进行交互。
This package uses dart_hocr package for interacting with xml file.
### 编辑控制器
`Editing controller` 允许外部与内容进行交互。
Editing controller allows external interaction with the content.
TODO: 需要文档化编辑控制器的接口。
完整示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 中使用 hocr_editor
插件。
示例代码
import 'package:flutter/services.dart' show ByteData, rootBundle;
import 'package:dart_hocr/dart_hocr.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hocr_editor/hocr_editor.dart'; // 导入 hocr_editor 包
void main() {
runApp(const ProviderScope(child: MyApp())); // 使用 Riverpod 管理状态
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
title: 'HOCR Editor',
home: HOCRDemo(), // 主页面
debugShowCheckedModeBanner: false,
);
}
}
class HOCRDemo extends StatefulWidget {
const HOCRDemo({super.key});
[@override](/user/override)
State<HOCRDemo> createState() => _HOCRDemoState(); // 创建状态类
}
class _HOCRDemoState extends State<HOCRDemo> {
bool isSaving = false; // 控制保存动画的状态
// 加载资源文件
Future<OCRImage?> loadAssets() async {
final ByteData bytes = await rootBundle.load('assets/sample1.jpg'); // 加载图像文件
return await OCRImage.fromOCRData(
image: bytes.buffer.asUint8List(), // 将图像数据转换为 Uint8List
lang1: 'hi', // 设置语言为印地语
width: 3024, // 图像宽度
height: 4032, // 图像高度
xmlString: await rootBundle.loadString('assets/sample1.hocr'), // 加载 HOCR XML 文件
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return SafeArea( // 确保内容不会超出屏幕边缘
child: Scaffold(
backgroundColor: Colors.transparent, // 背景透明
body: FutureBuilder( // 异步加载数据
future: loadAssets(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
// 如果正在加载,显示等待动画
return Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: const [
Text("Wait while loading the asset resources"), // 提示文字
CircularProgressIndicator(), // 加载动画
],
),
);
}
if (snapshot.data == null) {
// 如果加载失败,显示错误提示
return const Center(
child: Text("Failed loading the asset resources"),
);
}
return Stack( // 堆叠布局
children: [
HOCREditor( // HOCR 编辑器
ocrImage: snapshot.data as OCRImage, // 设置 OCR 图像数据
ocrViewController: HOCREditingController( // 编辑控制器
edit: true, // 启用编辑功能
onDiscardImage: () {}, // 取消操作回调
onCopyToClipboard: (text) {}, // 复制到剪贴板回调
onDictLookup: (String text, {required String lang}) {}, // 字典查询回调
onSaveImage: (img) async { // 保存图像回调
setState(() {
isSaving = true; // 开始保存动画
});
// 模拟保存逻辑
setState(() {
isSaving = false; // 结束保存动画
});
return img;
},
),
),
if (isSaving) const Center(child: CircularProgressIndicator()), // 显示保存动画
],
);
},
),
),
);
}
}
更多关于Flutter OCR编辑插件hocr_editor的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter OCR编辑插件hocr_editor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
hocr_editor
是一个用于 Flutter 的 OCR 编辑插件,它允许用户在应用程序中编辑 OCR 识别后的文本。hocr_editor
插件通常用于处理 HOCR 格式的 OCR 结果,HOCR 是一种基于 HTML 的格式,用于存储 OCR 识别后的文本及其布局信息。
安装 hocr_editor
插件
首先,你需要在 pubspec.yaml
文件中添加 hocr_editor
插件的依赖:
dependencies:
flutter:
sdk: flutter
hocr_editor: ^0.0.1 # 请确保使用最新版本
然后运行 flutter pub get
来安装依赖。
使用 hocr_editor
插件
以下是一个简单的示例,展示如何在 Flutter 应用中使用 hocr_editor
插件来编辑 OCR 识别后的文本。
import 'package:flutter/material.dart';
import 'package:hocr_editor/hocr_editor.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'HOCR Editor Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HOCREditorScreen(),
);
}
}
class HOCREditorScreen extends StatefulWidget {
[@override](/user/override)
_HOCREditorScreenState createState() => _HOCREditorScreenState();
}
class _HOCREditorScreenState extends State<HOCREditorScreen> {
final HOCREditorController _controller = HOCREditorController();
[@override](/user/override)
void initState() {
super.initState();
// 加载 HOCR 数据
_controller.loadHOCR('''
<div class='ocr_page'>
<div class='ocr_carea'>
<div class='ocr_par'>
<div class='ocr_line'>
<span class='ocrx_word'>Hello</span>
<span class='ocrx_word'>World</span>
</div>
</div>
</div>
</div>
''');
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('HOCR Editor'),
),
body: Column(
children: [
Expanded(
child: HOCREditor(
controller: _controller,
),
),
ElevatedButton(
onPressed: () {
// 获取编辑后的 HOCR 数据
String editedHOCR = _controller.getHOCR();
print(editedHOCR);
},
child: Text('Save'),
),
],
),
);
}
}