Vue实现:Ctrl+V粘贴文字图片截图,调用第三方API文字识别OCR内容并进行内容分割识别填充。

本文涉及的产品
文档理解,免费额度 各100页
车辆物流识别,车辆物流识别 200次/月
自定义KV模板,自定义KV模板 500次/账号
简介: Vue实现:Ctrl+V粘贴文字图片截图,调用第三方API文字识别OCR内容并进行内容分割识别填充。


paste组件

<template>
    <div>
        <el-button type="success" icon="el-icon-copy-document"
            @click="pasteText = '', visible = true">快捷粘贴(Ctrl+V)</el-button>
        <el-dialog 
            title="粘贴信息" 
            :visible.sync="visible" 
            append-to-body 
            :close-on-click-modal="false"
            :close-on-press-escape="false"
        >
            <el-input type="textarea" ref="textarea" :rows="10" placeholder="输入文字信息或直接粘贴图片" v-model="pasteText"
                maxlength="1000" show-word-limit @paste="paste"></el-input>
            <i class="upload-bg-img el-icon-picture"></i>
            <div slot="footer" class="dialog-footer">
                <el-button @click="close">取消</el-button>
                <el-button type="primary" @click="ok">确定</el-button>
            </div>
        </el-dialog>
    </div>
</template>
<script>
import $ from 'jquery';//cnpm i jquery -s
export default {
    data() {
        return {
            pasteText: '',
            visible: false,
        };
    },
    destroyed(d) {
        document.removeEventListener('paste', this.paste)
    },
    created() {
        document.addEventListener('paste', this.paste)
    },
    methods: {
        // 粘贴
        paste(event) {
            if (this.visible) return;
            // 文本----------------------------------------
            const text = (event.clipboardData || window.clipboardData).getData('text');
            if (text && text.trim()) {
                // console.log('粘贴的文本', text);
                this.pasteText = text;
                this.handleText(this.pasteText);
                return;
            }
            // 图片----------------------------------------
            let image = null;
            const items = (event.clipboardData || window.clipboardData).items;
            if (!items || items.length === 0) return this.$message.error('当前浏览器不支持本地打开图片,请复制粘贴文本内容!');
            for (let i = 0; i < items.length; i++) {
                if (items[i].type.indexOf('image') !== -1) {
                    image = items[i].getAsFile();
                    break;
                }
            }
            if (image) {
                // console.log('粘贴的图片', image);
                this.handleImage(image);
                return;
            }
            if (!text || !image) return this.$message.error('请粘贴文本或图片');
        },
        handleText(d) {
            let aa = d
                .replace(/\n(\n)*( )*(\n)*\n/g, "\n")//去掉多余空行
                .split('\n');//每一行作为一条数据
            let r = [];
            for (let i = 0, len = aa.length; i < len; i++) {
                let a = aa[i].trim().replace(/\s+/g, " ");//将连续多余空格缩减为一个空格
                a && r.push(a.split(" "));
            }
            this.$emit('result', r);
        },
        handleImage(d) {
            const reader = new FileReader();
            reader.readAsDataURL(d);
            reader.onload = e => {
                // e.target.result 即为base64结果
                let data = { image: e.target.result }
                data = JSON.stringify(data);
                // 粘贴上传图片接口调用(帮助文档:https://www.apispace.com/eolink/api/ocrbase/apiDocument#scroll=0) 
                $.ajax({
                    url: "https://eolink.o.apispace.com/ocrbase/ocr/v1/base",
                    method: "POST",
                    headers: {
                        "X-APISpace-Token": "自己去www.apispace.com申请",
                        "Authorization-Type": "apikey",
                        "Content-Type": "application/json"
                    },
                    data,
                    crossDomain: true
                })
                    .done(d => {
                        this.pasteText = d.words_result.map(v => v.word).join('\n')
                        this.visible = true;
                    })
                    .fail(d => {
                        this.$message.error(JSON.parse(d.responseText).msg);
                    });
            };
        },
        // 取消
        close(d) {
            this.visible = false;
        },
        // 确定
        ok(d) {
            if (this.pasteText && this.pasteText.trim()) {
                this.handleText(this.pasteText);
                this.close();
            } else this.$message.error(this.$refs.textarea.$el.querySelector("textarea").placeholder);
        },
    }
};
</script>
<style lang="scss" scoped>
.dialog-footer {
    display: flex;
    &>* {
        width: 100%;
    }
}
>>>.el-textarea {
    z-index: 1;
    .el-textarea__inner {
        min-height: 200px !important;
        max-height: 500px;
        background-color: transparent;
    }
}
.upload-bg-img {
    display: block;
    position: absolute;
    margin: auto;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    width: 100px;
    height: 100px;
    font-size: 100px;
    transform: translateY(-10px);
    color: #eee;
    pointer-events: none;
    z-index: 0;
}
</style>

调用paste组件

<paste @result="pasteResult"></paste>
...
import paste from "@/vue/components/paste";
...
components: {
    paste,
},
...
pasteResult(d) {
    console.log(JSON.stringify(d, null, 2));//输入内容见下面gif截图
},


相关文章
|
1天前
|
存储 容器
vue3【实战】来回拖拽放置图片
vue3【实战】来回拖拽放置图片
7 2
|
3天前
|
机器学习/深度学习 人工智能 文字识别
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
|
3天前
|
文字识别 Java Python
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
|
3天前
|
JSON 文字识别 数据格式
文本,文字识别,Flask实现内部接口开发,OCR外部接口的开发,如何开发一个识别接口,通过post调用,参数是图片的路径,内部调用,直接传图片路径就行
文本,文字识别,Flask实现内部接口开发,OCR外部接口的开发,如何开发一个识别接口,通过post调用,参数是图片的路径,内部调用,直接传图片路径就行
|
3天前
|
文字识别 Java Spring
文本,文字识别,SpringBoot服务开发,SpringBoot如何提供上传服务,接口的设计,它做了将Base64重新转为图片,SpringBoot的应用实例,项目基础搭建
文本,文字识别,SpringBoot服务开发,SpringBoot如何提供上传服务,接口的设计,它做了将Base64重新转为图片,SpringBoot的应用实例,项目基础搭建
|
6天前
|
JavaScript
vue 下载页面中的图片,如二维码
vue 下载页面中的图片,如二维码
11 1
|
8天前
|
JavaScript 开发工具 git
大事件项目40---Vue代码里如何引入相对路径图片
大事件项目40---Vue代码里如何引入相对路径图片
|
2天前
|
JavaScript
vue 在线聊天实战范例(含选择发送表情、图片、视频、音频,自定义右键快捷菜单,一键复制,左右聊天气泡)
vue 在线聊天实战范例(含选择发送表情、图片、视频、音频,自定义右键快捷菜单,一键复制,左右聊天气泡)
14 0
|
3天前
|
JavaScript 前端开发
文本,粘贴事件如何实现,先实现一个小目标,如何存入图片,从本地生成源码,先转成base64,ctrl + v这张图片就显示出来了怎样实现的,Vue可以有方法可以获取粘贴的所有元素,转base64字符串
文本,粘贴事件如何实现,先实现一个小目标,如何存入图片,从本地生成源码,先转成base64,ctrl + v这张图片就显示出来了怎样实现的,Vue可以有方法可以获取粘贴的所有元素,转base64字符串
|
5天前
|
JavaScript
vue实现点击按钮将指定文字复制到系统剪切板并提示复制成功
vue实现点击按钮将指定文字复制到系统剪切板并提示复制成功
6 0