实习日志7

news2024/11/18 3:45:48

1.试试pdf发票识别

1.1.添加文件类型判断

//判断文件类型
if (getFileType(imgCodeCell.getValue()) === "jpg"||getFileType(imgCodeCell.getValue()) === "png"
    ||getFileType(imgCodeCell.getValue()) === "jpeg"||getFileType(imgCodeCell.getValue()) === "bmp") {
    url = "customapi/fapiaoapi/vatinvoicebyimg";
    var data = {
        //传入请求地址
        token: access_token, imageUrl: imageBase64Cell.getValue()
    };
} else if (getFileType(imgCodeCell.getValue()) === "pdf") {
    url = "customapi/fapiaoapi/vatinvoicebypdf";
    var data = {
        //传入请求地址
        token: access_token, url: imageBase64Cell.getValue()
    };
} else {
    url = "customapi/fapiaoapi/vatinvoicebyurl"
    var data = {
        //传入请求地址
        token: access_token, url: imageUrlCell.getValue()
    };
}

//直接发送百度AI识别请求
InvoiceIdentificationPost(url,data);

1.2.pdf文件上传报错

需要xhr来处理pdf上传

if (getFileType(imgArray[index]) === "pdf") {
            console.log("识别到pdf文件");
            image = new Image();
            var xhr = new XMLHttpRequest();
            xhr.open("GET", img, true);
            xhr.responseType = "blob"; // 设置响应类型为二进制数据

            xhr.onload = function () {
                console.log("PDF加载完成");
                // var blob = xhr.response;
                var base64 = getBase64Image(image);
                var name = getImgName(imgArray[index]);
                var code = imgArray[index];
                Forguncy.getTableData("image", {"code": code}, function (data) {
                    alert("重复上传文件:" + name);
                }, function (errorMessage) {
                    console.log("添加文件成功" + name);
                    Forguncy.modifyTablesData({
                        image: {
                            addRows: [{
                                name: name, code: imgArray[index], base64: base64, url: imageUrl, is_identify: "未识别"
                            }],
                        }
                    });
                })
                // image.src = URL.createObjectURL(blob);
            }
            xhr.send();
        }

1.3.base64编码错误 

更改pdf的base64编码

改的有点捞,有优化空间,感觉发送的请求太多了,可能会出问题

//imgs=ffc31308-ec72-4268-a977-16f4c366a75f_whitepig.png|3e8582d5-7e4b-4544-8e51-446ba8f70905_blackpig.png
//img[1]=ffc31308-ec72-4268-a977-16f4c366a75f_whitepig.png
//img[2]=3e8582d5-7e4b-4544-8e51-446ba8f70905_blackpig.png
//....
const imgs = Forguncy.Page.getCell("img").getValue();
const imgArray = imgs.split("|");

var page = Forguncy.Page;

//遍历imgArray
for (let i = 0; i < imgArray.length; i++) {
    (function (index) {
        var img = `http://${window.location.host}/Forguncy/FileDownloadUpload/Download?file=` + imgArray[index];
        var imageUrl = `http://${window.location.host}/Forguncy/Upload/` + imgArray[index];
        console.log("第" + index + "轮次的文件:" + img);
        //加载image信息
        // 判断文件类型

        if (getFileType(imgArray[index]) === "jpg" || getFileType(imgArray[index]) === "png" || getFileType(imgArray[index]) === "jpeg" || getFileType(imgArray[index]) === "bmp") {
            console.log("识别到图像文件");
            var image = new Image();
            image.src = img;
            // 加载图像、PDF信息
            image.onload = function () {
                console.log("PDF加载完成");
                var base64 = getBase64Image(image);
                var name = getImgName(imgArray[index]);
                var code = imgArray[index];
                console.log("onload3");
                Forguncy.getTableData("image", {"code": code}, function (data) {
                    alert("重复上传文件:" + name);
                }, function (errorMessage) {
                    console.log("添加图片成功" + name);
                    Forguncy.modifyTablesData({
                        image: {
                            addRows: [{
                                name: name, code: imgArray[index], base64: base64, url: imageUrl, is_identify: "未识别"
                            }],
                        }
                    });
                });
            }
        } else if (getFileType(imgArray[index]) === "pdf") {
            console.log("识别到pdf文件");
            var xhr = new XMLHttpRequest();
            xhr.open("GET", img, true);
            xhr.responseType = "blob"; // 设置响应类型为二进制数据

            xhr.onload = function () {
                console.log("PDF加载完成");
                console.log(imageUrl);
                fetch(imageUrl)
                    .then(response => response.blob())
                    .then(blob => {
                        return new Promise((resolve, reject) => {
                            const reader = new FileReader();
                            reader.onloadend = () => resolve(reader.result.split(',')[1]);
                            reader.onerror = reject;
                            reader.readAsDataURL(blob);
                        });
                    })
                    .then(base64 => {
                        console.log(base64);
                        base64 = "data:application/pdf;base64," + base64;
                        //getPdfBase64返回base64
                        console.log("base64:" + base64);
                        var name = getImgName(imgArray[index]);
                        var code = imgArray[index];
                        Forguncy.getTableData("image", {"code": code}, function (data) {
                            alert("重复上传文件:" + name);
                        }, function (errorMessage) {
                            console.log("添加文件成功" + name);
                            Forguncy.modifyTablesData({
                                image: {
                                    addRows: [{
                                        name: name,
                                        code: imgArray[index],
                                        base64: base64,
                                        url: imageUrl,
                                        is_identify: "未识别"
                                    }],
                                }
                            });
                        })

                    })
                    .catch(error => {
                        console.error(error);
                        //getPdfBase64返回base64
                    });
            }
            xhr.send();
        } else {
            alert("识别到无效文件");
        }
    })(i);
}


function getBase64Image(img) {
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0, img.width, img.height);
    var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
    var dataURL = canvas.toDataURL("image/" + ext);
    return dataURL;
}


function getImgName(input) {
    var match = input.match(/_([^]*)/);
    var result = match && match[1];
    return result || null;
}

function getFileType(inputString) {
    let dotIndex = inputString.lastIndexOf('.');  // 找到最后一个句点的索引
    if (dotIndex !== -1) {
        // 获取句点后的子字符串
        return inputString.slice(dotIndex + 1);
    } else {
        return "文件名不合法";
    }
}

2.清空文件列表

2.1.js代码,活字格好像有点毛病,有时候js代码不生效

Forguncy.modifyTablesData({
    image: {
        editRows: [
            {
                primaryKey:
                    {
                        is_identify: "未识别"
                    },
                values: {
                    is_identify: "past_未识别"
                }
            },
            {
                primaryKey:
                    {
                        is_identify: "已识别"
                    },
                values: {
                    is_identify: "past_已识别"
                }
            },
            {
                primaryKey:
                    {
                        is_identify: "已验真"
                    },
                values: {
                    is_identify: "past_已验真"
                }
            },
            {
                primaryKey:
                    {
                        is_identify: "重复识别"
                    },
                values: {
                    is_identify: "past_重复识别"
                }
            },
        ]
    },
});

2.2.用活字格的图形化操作

嘎嘎好用

3.打印机

3.1.入门看了一下别人的博客

RFID入门学习(三次更改)_rfid知识学习-CSDN博客

3.2.下了个软件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1417859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW继电器触点接触电阻自动测试

继电器作为工业中的重要组件&#xff0c;其性能直接影响着整个生产线的可靠性和安全性。触点接触电阻是衡量继电器性能的重要参数&#xff0c;传统的测试方法效率低下且成本高昂。为了解决这些问题&#xff0c;采用LabVIEW软件&#xff0c;结合专业的硬件平台&#xff0c;实现了…

armv8 - GIC-V2 中断控制器

GIC起源 上一节中&#xff0c;粗略讲了hylicos上用的armv7上的一个通用中断控制器&#xff0c;其只支持60个中断源。但现代SoC上&#xff0c;中断系统正变得越来越复杂&#xff0c;旧的中断控制器已经无法胜任这些系统&#xff0c;主要体现在以下几点上&#xff1a; 中断源越…

(二十一)Flask之上下文管理第二篇(细细扣一遍源码)

每篇前言&#xff1a; &#x1f3c6;&#x1f3c6;作者介绍&#xff1a;【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者 &#x1f525;&#x1f525;本文已收录于Flask框架从入门到实战专栏&#xff1a;《Flask框架从入…

Linux文件管理(下)

上上篇介绍了Linux文件管理的上部分内容&#xff0c;这次继续将 Linux文件管理的剩余部分说完。内容如下。 一、查看文件内容 1、cat 命令 1.1 输出文件内容 基本语法&#xff1a; cat 文件名称主要功能&#xff1a;正序输出文件的内容。 eg&#xff1a;输出 readme.txt文…

内网安全:NTLM-Relay

目录 NTLM认证过程以及攻击面 NTLM Relay攻击 NTLM攻击总结 实验环境说明 域横向移动&#xff1a;NTLM中继攻击 攻击条件 实战一&#xff1a;NTLM中继攻击-CS转发上线MSF 原理示意图 一. CS代理转发 二. MSF架设路由 三. 适用smb_relay模块进行中继攻击 域横向移动…

Scratch:塑造孩子思维能力的魔法工具

在当今的数字化时代&#xff0c;编程已经成为一项重要的技能&#xff0c;而Scratch正是引领孩子们迈入编程世界的一扇大门。它不仅教会孩子们如何编写代码&#xff0c;更重要的是培养了孩子们的思维能力&#xff0c;为他们的成长奠定了坚实的基础。 Scratch是一款由麻省理工学…

掌握三大关键要素,玩转亚马逊测评

对于那些刚刚涉足亚马逊测评的新手小白&#xff0c;经常听到的一个警告是亚马逊平台的风控正在日益严格。尤其是对评论的管理&#xff0c;一旦稍有不慎&#xff0c;评论就可能被删除。那么&#xff0c;如何避免这种情况的发生呢&#xff1f;在进行亚马逊测评时&#xff0c;新手…

牛客周赛30

思路&#xff1a;先把x, y除以最大公约数变成最小值&#xff0c;然后同时乘以倍数cnt&#xff0c;只记录两个数都在[l,r]间的倍数。 代码&#xff1a; int gcd(int a,int b){return b ? gcd(b, a % b) : a; }void solve(){int x, y, l, r;cin >> x >> y >>…

Unity-WebGL

问题&#xff1a;提示gzip压缩报错解决&#xff1a;关闭打包的地方压缩&#xff0c;如下图问题&#xff1a;窗口未全屏解决&#xff1a;使用百分比画布替换固定尺寸画布 参考&#xff1a;新版Unity打包Webgl端进行屏幕自适应_unity webgl分辨率自适应-CSDN博客问题&#xff1a;…

《微信小程序开发从入门到实战》学习九十六

7.2 基础内容组件 7.2.4 progress组件 progress组件的示例代码如下&#xff1a; <progress percent"20" show-info /> 7.3 表单组件 表单组件是用于收集信息的组件。第三章介绍了许多表单组件&#xff0c;包括form、input、textarea、picker、switch、butt…

算法学习记录:动态规划

前言&#xff1a; 算法学习记录不是算法介绍&#xff0c;本文记录的是从零开始的学习过程&#xff08;见到的例题&#xff0c;代码的理解……&#xff09;&#xff0c;所有内容按学习顺序更新&#xff0c;而且不保证正确&#xff0c;如有错误&#xff0c;请帮助指出。 学习工具…

Redis学习——高级篇③

Redis学习——高级篇③ Redis7高级之缓存双写一致性之更新策略探讨&#xff08;三&#xff09; 1.缓存双写一致性2.数据库和缓存一致性的几种更新策略2.1 可停机的情况2.2 不可停机的情况,四种更新策略&#xff08;推荐最后一种&#xff0c;看场景&#xff09;1.❌先…

【Vue实用功能】Vue实现文档在线预览功能,在线预览PDF、Word等office文件

1、Office Web(微软的开发接口) 优点 没有 Office也可以直接查看Office 文件适用于移动端、PC无需下载文件就可以在浏览器中查看 <iframe src"文档地址" frameborder"0" /> const docUrl 外网可预览的地址 const url encodeURIComponent(docUrl…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖微信小程序端(十五)

用户端历史订单模块 1. 查询历史订单1.1 需求分析和设计1.2 代码实现1.2.1 user/OrderController1.2.2 OrderService1.2.3 OrderServiceImpl1.2.4 OrderMapper1.2.5 OrderMapper.xml1.2.6 OrderDetailMapper 2. 查询订单详情2.1 需求分析和设计2.2 代码实现2.2.1 user/OrderCon…

K8s 安装部署-Master和Minion(Node)

K8s 安装部署-Master和Minion(Node) 操作系统版本&#xff1a;CentOS 7.4 Master &#xff1a;172.20.26.167 Minion-1&#xff1a;172.20.26.198 Minion-2&#xff1a;172.20.26.210&#xff08;后增加节点&#xff09; ETCD&#xff1a;172.20.27.218 先安装部署ETCD y…

Linux实验记录:添加硬盘设备

前言&#xff1a; 本文是一篇关于Linux系统初学者的实验记录。 参考书籍&#xff1a;《Linux就该这么学》 实验环境&#xff1a; VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 目录 前言&#xff1a; 备注&#xff1a; 添加硬盘…

Java: Low Poly Islands

一大批岛屿资产供您在下一Unity项目中使用!包括热带岛屿、火山岛、热带山脉、植被、乡村房屋、木板路、船只、粒子、后期FX等。 适用于原型设计、移动、LOD或风格化游戏。 模块化部分很容易在Unity网格上组装在一起。 141种独特的预制件,包括: - 38个具有LOD的岛屿模型 - 30…

云上高可用系统-韧性设计模式

一、走近韧性设计模式 &#xff08;一&#xff09;基本概念 韧性设计模式是一系列在软件工程中用于提高系统韧性的设计原则、策略、实践和模式。韧性&#xff08;Resilience&#xff09;在这里指的是系统对于各种故障、异常和压力的抵抗能力&#xff0c;以及在遭受这些挑战后…

vue实现获取系统当前年月日时分秒星期

(壹)博主介绍 &#x1f320;个人博客&#xff1a; 尔滨三皮⌛程序寄语&#xff1a;木秀于林&#xff0c;风必摧之&#xff1b;行高于人&#xff0c;众必非之。 (贰)文章内容 <!-- 获取系统当前时间 --> <template><div class"currentTimeBox"><…

增存量市场大爆发!国产通信中间件「反攻」

梳理2023年智能驾驶的发展脉络可见&#xff0c;消费者对智能驾驶的认可度和接受度越来越高&#xff0c;带动高速NOA迈向了规模化普及新阶段&#xff0c;城市NOA初露锋芒。 从更长远的行业变革周期来看&#xff0c;智能驾驶的技术迭代还在继续&#xff0c;叠加电子电气架构的深…