You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:44:55