HarmonyOS 鸿蒙Next 如何将DocumentScanner文档扫描后拿到的结果uri,保存到Documents目录下?
HarmonyOS 鸿蒙Next 如何将DocumentScanner文档扫描后拿到的结果uri,保存到Documents目录下?
代码使用的示例:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/vision-documentscanner-V5
使用VisionKit中的DocumentScanner扫描文件,获取到扫描结果,并将结果保存至Documents目录
import { DocType, DocumentScanner, DocumentScannerConfig, SaveOption, EditTab, FilterId, ShootingMode } from "[@kit](/user/kit).VisionKit"
import hilog from '[@ohos](/user/ohos).hilog'
import { fileIo, fileUri } from '[@kit](/user/kit).CoreFileKit'
import { image } from '[@kit](/user/kit).ImageKit'
import { BusinessError } from '[@kit](/user/kit).BasicServicesKit'
const TAG: string = 'DocDemoPage' //文档扫描页,用于加载uiExtensionAbility
[@Entry](/user/Entry)({ routeName: 'DocDemoPage' })
[@Component](/user/Component)
struct DocDemoPage {
[@State](/user/State) docImageUris: string[] = []
private docScanConfig = new DocumentScannerConfig()
aboutToAppear() {
this.docScanConfig.supportType = [DocType.DOC] //是否支持从图库进行选图
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 = []
this.docScanConfig.saveOptions = [SaveOption.PDF]
}
build() {
Column() {
DocumentScanner({
scannerConfig: this.docScanConfig,
onResult: (code: number, saveType: SaveOption, uris: string[]) => {
hilog.info(0x0001, TAG, `result code: ${code}, save: ${saveType}`)
if (code === -1) {
// promptAction.showToast({message: '失败'})
}
uris.forEach(uriString => {
hilog.info(0x0001, TAG, `uri: ${uriString}`)
})
this.docImageUris = uris
let filePath = uris[0]
console.info(filePath)
try {
let myFile1 = fileIo.openSync(filePath, fileIo.OpenMode.READ_ONLY)
let context = getContext(this);
let pathDir = context.filesDir + '/card.jpeg';
console.info(pathDir)
// 照片都拷贝进应用沙箱
fileIo.copyFileSync(myFile1.fd, pathDir);
fileIo.copyFile(myFile1.fd, pathDir).then(() => {
console.info("copyFile succeed");
// 转换成可显示的类型
let imageSourceApi = image.createImageSource(pathDir);
class tmp {
height: number = 100;
width: number = 100
}
let options: Record<string, number | boolean | tmp> = {
'alphaType': 0, // 透明度
'editable': false, // 是否可编辑
'pixelFormat': 3, // 像素格式
'scaleMode': 1, // 缩略值
'size': { height: 100, width: 100 }
} // 创建图片大小
imageSourceApi.createPixelMap(options).then((pixelMap: PixelMap) => {
if (pixelMap != undefined) {
pixelMap.getImageInfo().then( (info : image.ImageInfo) => {
console.info('info.width = ' + info.size.width);
console.info('info.height = ' + info.size.height);
}).catch((err : BusinessError) => {
console.error("Failed to obtain the image pixel map information.And the error is: " + err);
});
} else {
console.info("失败");
}
})
}).catch((err: BusinessError) => {
console.error("copyFile failed with error:" + err);
});
} catch (e) {
// CommonUtils.showSingleDialog(JSON.stringify(e))
}
}
})
.size({ width: '100%', height: '100%' })
}
}
}
在HarmonyOS鸿蒙Next系统中,将DocumentScanner文档扫描后获取的结果URI保存到Documents目录下,可以通过以下步骤实现:
-
获取扫描结果URI:首先,通过DocumentScanner API完成文档扫描并获取扫描结果的URI。这个URI通常指向一个临时存储位置,其中包含了扫描后的图像数据。
-
访问Documents目录:接下来,使用SAF(Storage Access Framework)或系统提供的API来访问设备的Documents目录。确保你的应用已获取必要的存储权限。
-
创建文件并复制数据:在Documents目录下创建一个新的文件,用于存储扫描结果。然后,使用文件I/O操作(如FileInputStream和FileOutputStream)将扫描结果URI指向的数据复制到新创建的文件中。
-
保存文件路径:最后,保存新创建文件的路径,以便后续使用。
请注意,在操作过程中要确保正确处理异常和释放资源,以避免内存泄漏或文件损坏。
此外,由于不同设备和HarmonyOS版本的差异,某些API或行为可能有所不同。如果在实际开发中遇到问题,建议参考最新的HarmonyOS开发文档或官方示例代码。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html