NetSuite集成Tesseract:读取File Cabinet中图片内容的方法
在NetSuite中使用Tesseract识别File Cabinet图片内容
错误原因
你碰到的recognize未定义错误,核心问题是Tesseract库未在NetSuite客户端脚本环境中正确加载或初始化。NetSuite的客户端脚本运行在受限环境中,第三方库的加载方式和普通前端页面有差异,直接打包自定义库容易出现作用域或加载顺序问题。
完整实现方案
1. 正确加载Tesseract库
不要自行打包Tesseract库,通过动态创建script标签加载官方稳定版本(需确保所用CDN在NetSuite允许的外部资源列表中):
function pageInit() { var scriptTag = document.createElement('script'); // 替换为Tesseract.js官方稳定版本的CDN地址 scriptTag.src = 'https://unpkg.com/tesseract.js@v5.0.2/dist/tesseract.min.js'; scriptTag.onload = function() { // 库加载完成后再执行OCR逻辑,避免未定义错误 processImageOCR(); }; document.head.appendChild(scriptTag); }
2. 搭建服务端RESTlet获取图片数据
NetSuite客户端脚本无法直接访问File Cabinet,需要通过服务端RESTlet作为中间层读取图片的Base64内容:
/** * @NApiVersion 2.x * @NScriptType Restlet */ define(['N/file'], function(file) { function getImageBase64(request) { try { var fileObj = file.load({ id: request.fileId // 传入File Cabinet中的图片ID }); return { base64: fileObj.getContents() }; } catch (err) { return { error: err.message }; } } return { get: getImageBase64 }; });
3. 客户端调用RESTlet并执行OCR识别
在客户端脚本中,先获取图片Base64数据,再调用Tesseract的recognize方法处理:
function processImageOCR() { // 替换为你的RESTlet脚本ID和部署ID var restletUrl = '/app/site/hosting/restlet.nl?script=你的脚本ID&deploy=你的部署ID'; var targetFileId = 12345; // 替换为File Cabinet中的目标图片ID // 请求RESTlet获取图片Base64 fetch(`${restletUrl}&fileId=${targetFileId}`) .then(res => res.json()) .then(data => { if (data.error) throw new Error(data.error); // 将Base64转为Tesseract可识别的图片URL格式 var imageUrl = `data:image/png;base64,${data.base64}`; // 执行OCR识别 Tesseract.recognize( imageUrl, 'eng', // 识别语言,可按需修改为其他语言代码 { logger: m => console.log(m) } // 可选,用于调试 ).then(result => { // 识别结果存入变量,后续可按需使用 var extractedText = result.text; console.log('识别内容:', extractedText); // 示例:将结果赋值给页面自定义字段 // document.getElementById('custpage_extracted_text').value = extractedText; }).catch(ocrErr => { console.error('OCR识别失败:', ocrErr); }); }).catch(reqErr => { console.error('获取图片失败:', reqErr); }); }
4. 关键注意事项
- 权限配置:确保RESTlet脚本和客户端脚本的部署角色拥有File Cabinet的读取权限,RESTlet的部署设置中要勾选正确的访问权限。
- 异步处理:Tesseract的
recognize是异步方法,必须通过Promise回调处理结果,不能同步调用。 - 格式兼容:确保File Cabinet中的图片为PNG、JPG等Tesseract支持的格式,避免因格式问题导致识别失败。
- 版本选择:使用Tesseract.js的稳定版本,避免测试版带来的环境兼容问题。
内容的提问来源于stack exchange,提问作者Swetha M
相关产品推荐
相关产品推荐

