0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【HarmonyOS 5】鸿蒙应用实现发票扫描、文档扫描输出PDF图片或者表格的功能

HarmonyOS解决方案 来源:HarmonyOS解决方案 作者:HarmonyOS解决方案 2025-07-11 18:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

HarmonyOS 5】鸿蒙应用实现发票扫描、文档扫描输出PDF图片或者表格的功能

##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财#

一、前言

image.png

图(1-1)

HarmonyOS 的 ** 文档扫描控件(DocumentScanner)** 是 AI Vision Kit 提供的核心场景化视觉服务,旨在帮助开发者快速实现移动端文档数字化功能。

其核心能力包括 :扫描合同、票据、会议记录并保存为 PDF 分享。拍摄课堂 PPT、书籍章节生成图片存档。快速识别表格数据,减少手动录入成本。

在HarmonyOS 5.0 及以上系统的手机 / 平板( 不支持模拟 )。

二、DocumentScanner都具备什么功能?

image.png

图(1-2)

文档扫描控件提供拍摄文档并转换为高清扫描件的服务。

  1. 使用手机拍摄文档,即可自动裁剪和优化,并支持 jpeg图片、PDF格式保存和分享 。如图(1-1)所示。
  2. 支持拍摄拍照或图片识别表格,生成 表格文档 。如图(1-2)所示。

三、DocumentScanner怎么用?

1. 导入依赖模块:

import { DocType, DocumentScanner, DocumentScannerConfig, SaveOption, FilterId, ShootingMode, EditTab, DocumentScannerResultCallback } from "@kit.VisionKit";

2. 配置扫描config对象:
定义扫描参数(如拍摄模式、识别类型、滤镜等)。

名称类型可选说明
maxShotCountnumber最大拍摄张数,范围[1,50],默认1
supportTypeDocType[]支持的识别类型(文档/表格),默认[DocType.DOC],部分机型仅支持文档。
isGallerySupportedboolean是否支持从图库选图,默认true
defaultFilterIdFilterId初始滤镜(原图/黑白/增强),默认增强(STRENGTHEN)。
editTabsEditTab[]Tab栏功能按钮(旋转/删除/重拍),默认全部显示。
defaultShootingModeShootingMode拍摄模式(自动/手动),默认手动(MANUAL)。
isShareableboolean是否支持分享,默认true
saveOptionsSaveOption[]保存格式(JPG/PDF/EXCEL),默认[JPG, EXCEL]
originalUrisstring[]初始图片URI列表(用于直接跳转编辑页),最大长度50,需符合尺寸规格。
private docScanConfig = new DocumentScannerConfig()

  setDocScanConfig() {
    this.docScanConfig.supportType = [DocType.DOC, DocType.SHEET]
    this.docScanConfig.isGallerySupported = true
    this.docScanConfig.editTabs = []
    this.docScanConfig.maxShotCount = 3
    this.docScanConfig.defaultFilterId = FilterId.ORIGINAL
    this.docScanConfig.defaultShootingMode = ShootingMode.MANUAL
    this.docScanConfig.isShareable = true
    this.docScanConfig.originalUris = []
  }

3. UI布局中添加DocumentScanner
将第二步配置创建好的scannerConfig对象进行赋值。
并且处理onResult回调,当扫描处理成功后会返回Uris。

参数名类型说明
codenumber状态码:-1=取消/200=成功/1008601001=URI无效(5.0.5+)
saveTypeSaveOption保存格式(JPG/PDF/EXCEL)
urisstring[]生成的文件URI列表(扫描结果或表格文档)
//文档扫描
        DocumentScanner({
          scannerConfig: this.docScanConfig,
          onResult: (code: number, saveType: SaveOption, uris: string[]) = > {
            hilog.info(0x0001, TAG, `result code: ${code}, save: ${saveType}`)
            if (code === -1) {
              this.pathStack?.pop()
            }
            uris.forEach(uriString = > {
              hilog.info(0x0001, TAG, `uri: ${uriString}`)
            })
            this.docImageUris = uris
          }
        })
          .size({ width: '100%', height: '100%' })

源码示例分享

image.png

// MainPage.ets - 扫描入口页面

import { NavPathStack } from '@ohos.router';
import { DocDemoPage } from './DocDemoPage'; // 引入扫描实现页

@Entry
@Component
struct MainPage {
  // 导航栈管理页面跳转
  private pathStack: NavPathStack = new NavPathStack()

  build() {
    Navigation(this.pathStack) {
      Column({ space: 20 }) {
        // 标题
        Text('文档扫描Demo').fontSize(24).fontWeight(500);
        
        // 扫描入口按钮
        Button('开始扫描文档', { type: ButtonType.Capsule, stateEffect: true })
          .width('60%')
          .height(50)
          .onClick(() = > {
            // 跳转到扫描页面
            this.pathStack.pushPath({ name: 'documentScanner' });
          });
      }
      .justifyContent(FlexAlign.Center)
      .width('100%')
      .height('100%');
    }
	.navDestination(this.PageMap)
    .mode(NavigationMode.Stack)
    .title('文档扫描示例');
  }
}

// DocDemoPage.ets - 扫描功能实现与结果展示

import { 
  DocType, DocumentScanner, DocumentScannerConfig, 
  SaveOption, FilterId, ShootingMode, EditTab 
} from "@kit.VisionKit";
import { hilog, LogLevel } from '@ohos.hilog'; // 日志工具

const TAG = 'DocScannerDemo'; // 日志标签

@Entry
@Component
export struct DocDemoPage {
  @State scanResults: string[] = []; // 保存扫描结果URI
  private pathStack: NavPathStack | null = null;

  // 扫描配置初始化
  private docScanConfig = new DocumentScannerConfig();

  // 页面加载时配置扫描参数
  aboutToAppear() {
    this.docScanConfig.supportType = [DocType.DOC, DocType.SHEET]; // 支持文档和表格识别
    this.docScanConfig.maxShotCount = 3; // 最多拍摄3张
    this.docScanConfig.isGallerySupported = true; // 允许从图库选图
    this.docScanConfig.defaultFilterId = FilterId.STRENGTHEN; // 默认增强滤镜
    this.docScanConfig.defaultShootingMode = ShootingMode.MANUAL; // 手动拍摄模式
    this.docScanConfig.editTabs = [EditTab.ROTATE_TAB, EditTab.RESHOOT_TAB]; // 显示旋转和重拍按钮
    this.docScanConfig.saveOptions = [SaveOption.JPG, SaveOption.PDF, SaveOption.EXCEL]; // 支持三种保存格式
    this.docScanConfig.isShareable = true; // 开启分享功能
  }

  build() {
    NavDestination({ name: 'documentScanner' }) {
      Stack() {
        // 扫描结果展示区域
        Column() {
          if (this.scanResults.length > 0) {
            Text('扫描结果').fontSize(18).fontWeight(500).margin({ top: 20 });
            Grid() {
              ForEach(this.scanResults, (uri, index) = > {
                // 展示缩略图,点击可预览(示例中简化为日志输出)
                Image(uri)
                  .objectFit(ImageFit.Contain)
                  .width(150)
                  .height(150)
                  .margin(10)
                  .onClick(() = > hilog.info(LogLevel.INFO, TAG, `预览图片:${uri}`));
              })
              .columnsTemplate('1fr 1fr') // 两行布局
              .rowGap(10)
              .columnGap(10);
          }
        }
        .width('100%')
        .padding(20);

        // 文档扫描控件主体
        DocumentScanner({
          scannerConfig: this.docScanConfig,
          onResult: (code: number, saveType: SaveOption, uris: string[]) = > {
            hilog.info(LogLevel.INFO, TAG, `扫描结果:code=${code}, 格式=${SaveOption[saveType]}`);
            switch (code) {
              case 200: // 成功
                this.scanResults = uris; // 更新结果列表
                hilog.info(LogLevel.INFO, TAG, `保存路径:${uris.join(', ')}`);
                break;
              case -1: // 用户取消
                this.pathStack.pop(); // 返回上一页
                break;
              case 1008601001: // URI无效(5.0.5+支持)
                hilog.error(LogLevel.ERROR, TAG, '传入的图片规格不符合要求');
                break;
            }
          }
        })
        .size({ width: '100%', height: '100%' })
        .margin({ top: 80 }); // 留出结果展示区域空间
      }
      .width('100%')
      .height('100%')
      .hideTitleBar(true); // 隐藏导航栏
      .onReady((context: NavDestinationContext)= >{
      		this.pathStack = context?.pathStack;
    	})
  }
}

注意

originalUris图片

  • 单边长度:224px ≤ 长/宽 ≤ 8000px。
  • 宽高乘积:≤ 6000×8000 px²。
  • 宽高比:≤ 3(即最长边/最短边 ≤ 3)。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    60

    文章

    2859

    浏览量

    45359
  • HarmonyOS
    +关注

    关注

    80

    文章

    2146

    浏览量

    35583
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    pdf转换成word文档格式乱了

    df转换成word文档格式乱了   将 pdf 转为 word 是常见的操作,但很多人发现结果很乱,文字会移位,字体变化,表格断裂,图片偏离原位.这是因为
    的头像 发表于 11-22 10:04 759次阅读

    HarmonyOS 5鸿蒙应用隐私保护详解

    HarmonyOS 5鸿蒙应用隐私保护详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 07-11 18:30 964次阅读

    HarmonyOS 5鸿蒙中进度条的使用详解

    HarmonyOS 5鸿蒙中进度条的使用详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 07-11 18:26 740次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鸿蒙</b>中进度条的使用详解

    HarmonyOS 5鸿蒙星闪NearLink详解

    HarmonyOS 5鸿蒙星闪NearLink详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 07-11 18:24 1508次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鸿蒙</b>星闪NearLink详解

    HarmonyOS 5鸿蒙mPaaS详解

    HarmonyOS 5鸿蒙mPaaS详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 07-11 18:23 676次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鸿蒙</b>mPaaS详解

    HarmonyOS 5】金融应用开发鸿蒙组件实践

    HarmonyOS 5】金融应用开发鸿蒙组件实践 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 07-11 18:20 752次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】金融应用开发<b class='flag-5'>鸿蒙</b>组件实践

    HarmonyOS 5鸿蒙中的UIAbility详解(二)

    HarmonyOS 5鸿蒙中的UIAbility详解(二) ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 07-11 18:17 695次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鸿蒙</b>中的UIAbility详解(二)

    HarmonyOS 5 入门系列 】鸿蒙HarmonyOS示例项目讲解

    HarmonyOS 5 入门系列 】鸿蒙HarmonyOS示例项目讲解 ##鸿蒙开发能力 ##Har
    的头像 发表于 07-07 11:57 807次阅读
    【 <b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b> 入门系列 】<b class='flag-5'>鸿蒙</b><b class='flag-5'>HarmonyOS</b>示例项目讲解

    HarmonyOS 5】桌面快捷方式功能实现详解

    HarmonyOS 5】桌面快捷方式功能实现详解 ##鸿蒙开发能力 ##HarmonyOS S
    的头像 发表于 06-21 16:42 1792次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】桌面快捷方式<b class='flag-5'>功能</b><b class='flag-5'>实现</b>详解

    扫描电机的PID恒速控制仿真及实验

    ,实现了对电机选控制。 纯分享帖,需要者可点击附件免费获取完整资料~~~*附件:扫描电机的PID恒速控制仿真及实验.pdf【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片
    发表于 06-16 21:53

    HarmonyOS 5鸿蒙中的UIAbility详解(三)

    HarmonyOS 5鸿蒙中的UIAbility详解(三) ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 06-14 22:32 486次阅读

    鸿蒙5开发宝藏案例分享---优化应用包体积大小问题

    ; { module.showFeature(); }); 场景建议 : 非核心功能(如客服、小游戏) 地域限定内容(如海外版插件) ?5. 扫描工具:精准定位优化点 **鸿蒙提供
    发表于 06-13 10:09

    DevEco Studio AI辅助开发工具两大升级功能 鸿蒙应用开发效率再提升

    随着搭载HarmonyOS 5的Pura X发布,鸿蒙生态进入快车道,各应用正在加速适配开发,越来越多开发者加入到鸿蒙应用开发浪潮中。为提升鸿蒙
    发表于 04-18 14:43

    鸿蒙应用元服务开发-Account Kit获发票抬头

    Scenario Fusion Kit对应的Button组件并设置openType为CHOOSE_INVOICE_TITLE,打开华为账号发票抬头选择页。 用户可以在发票抬头选择页选择已有发票抬头
    发表于 04-01 15:26

    远程输入输出扫描仪说明

    电子发烧友网站提供《远程输入输出扫描仪说明.pdf》资料免费下载
    发表于 03-26 15:06 0次下载