# PDF文档识别(OCR大模型) API文档

单个 PDF 文件最大支持 100 页,请控制单份文档的页数大小。
若 PDF 文件页数超出 100 页,建议按章节或内容模块拆分后分别识别;或联系我们 (opens new window)进行商务定制。

技术咨询可直接提交工单 (opens new window)
注意事项:
1、包含数学公式的PDF建议导出格式设置为 markdown
2、暂不支持上传带有密码保护或权限加密的 PDF 文件

# 接口调用示例

部分开发语言Demo如下,其他开发语言请参照文档进行开发,欢迎大家到讯飞开放平台社区 (opens new window)交流集成经验。
PDF文档识别 Java demo (opens new window)

# 接口与鉴权

# 接口域名

iocr.xfyun.cn

# 获取签名

在HTTP请求头 header 中设置参数:appId, timestamp, signature

String appId = "应用ID";
String secret = "应用的秘钥";
long timestamp = System.currentTimeMillis()/1000;
String signature = ApiAuthAlgorithm.getSignature(appId, secret, timestamp);

request.setHeader("appId",appId);
request.setHeader("timestamp",str(timestamp));
request.setHeader("signature",signature);
字段名 类型 描述 必须 默认值
appId String 应用ID Y
timestamp String 时间戳,单位: s,与服务端时间相差五分钟之内 Y
signature String 签名 Y

# DEMO

ApiAuthAlgorithm.class 鉴权类

public class ApiAuthAlgorithm {

    private static final char[] MD5_TABLE = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

    /**
     * 获取签名
     *
     * @param appId    签名的key
     * @param secret 签名秘钥
     * @return 返回签名
     */
    public String getSignature(String appId, String secret, long ts) {
        try {
            String auth = md5(appId + ts);
            return hmacSHA1Encrypt(auth, secret);
        } catch (SignatureException e) {
            return null;
        }
    }

    /**
     * sha1加密
     *
     * @param encryptText 加密文本
     * @param encryptKey  加密键
     * @return 加密
     */
    private String hmacSHA1Encrypt(String encryptText, String encryptKey) throws SignatureException {
        byte[] rawHmac;
        try {
            byte[] data = encryptKey.getBytes(StandardCharsets.UTF_8);
            SecretKeySpec secretKey = new SecretKeySpec(data, "HmacSHA1");
            Mac mac = Mac.getInstance("HmacSHA1");
            mac.init(secretKey);
            byte[] text = encryptText.getBytes(StandardCharsets.UTF_8);
            rawHmac = mac.doFinal(text);
        } catch (InvalidKeyException e) {
            throw new SignatureException("InvalidKeyException:" + e.getMessage());
        } catch (NoSuchAlgorithmException e) {
            throw new SignatureException("NoSuchAlgorithmException:" + e.getMessage());
        }
        return new String(Base64.encodeBase64(rawHmac));
    }

    private String md5(String cipherText) {
        try {
            byte[] data = cipherText.getBytes();
            // 信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
            MessageDigest mdInst = MessageDigest.getInstance("MD5");

            // MessageDigest对象通过使用 update方法处理数据, 使用指定的byte数组更新摘要
            mdInst.update(data);

            // 摘要更新之后,通过调用digest()执行哈希计算,获得密文
            byte[] md = mdInst.digest();

            // 把密文转换成十六进制的字符串形式
            int j = md.length;
            char[] str = new char[j * 2];
            int k = 0;
            for (byte byte0 : md) { // i = 0
                str[k++] = MD5_TABLE[byte0 >>> 4 & 0xf]; // 5
                str[k++] = MD5_TABLE[byte0 & 0xf]; // F
            }
            // 返回经过加密后的字符串
            return new String(str);
        } catch (Exception e) {
            return null;
        }
    }
}

# 错误码

错误码 描述 处理方式
10000 系统错误 确认鉴权信息、请求方式、请求参数是否有误,或联系技术人员排查相关日志
10001 签名认证失败 检查鉴权信息
10002 业务处理错误 查看报错提示或联系技术人员
10003 计量处理错误 检查appId的余额是否充足

# 接口列表

# 1、PDF OCR开始任务

1.1 接口描述:

上传文件或提供公网PDF的地址,用于把PDF转换为对应的格式

1.2 接口地址:

https://iocr.xfyun.cn/ocrzdq/v1/pdfOcr/start

1.3 请求查询参数:

POST,multipart/form-data
名称 类型 描述 必须 默认值
file File 要上传的文件,跟pdfUrl必填其一 N
pdfUrl String 公网可访问的pdf地址,跟file必填其一 N
exportFormat String OCR识别后导出的格式,可选:word、markdown、json其一 N word

1.4 请求响应:

{
    "flag": true,
    "code": 0,
    "desc": "成功",
    "data": {
        "taskNo": "25082744936879",
        "status": "CREATE",
        "tip": "任务创建成功",
    }
}

1.5 响应描述

响应字段 类型 描述
flag Boolean 响应标识
code Integer 错误码
desc String 错误详情
data.taskNo string 任务号,用于状态查询
data.status string 状态
data.tip string 状态提示

# 2、PDF OCR任务状态

2.1 接口地址:

https://iocr.xfyun.cn/ocrzdq/v1/pdfOcr/status

2.2 请求查询参数:

注:该接口设置限流,五秒访问一次

GET
名称 类型 描述 必须
taskNo String 任务号,开始任务接口返回 Y
{
    "flag": true,
    "code": 0,
    "desc": "成功",
    "data": {
        "taskNo": "25082759289333",
        "exportFormat": "word",
        "status": "FINISH",
        "downUrl": "http://bjcdn.openstorage.cn/ocrzdq/ocr/20250827/miDe47BF/25082759289333_file.docx",
        "tip": "已完成",
        "pageList": [
            {
                "pageNum": 1,
                "sourceUrl": "http://bjcdn.openstorage.cn/ocrzdq/ocr/20250827/y9bubL2N/file_%E7%AC%AC1%E9%A1%B5.jpg",
                "downUrl": "http://bjcdn.openstorage.cn/ocrzdq/ocr/20250827/cFGBlC5e/file_%E7%AC%AC1%E9%A1%B5.docx",
                "status": "FINISH",
                "tip": null
            }
        ]
    }
}

2.3 响应描述

响应字段 类型 描述
flag Boolean 响应标识
code Integer 错误码
desc String 错误详情
data.taskNo string 任务号
data.exportFormat string 导出格式
data.downUrl string 导出文件下载地址
data.status string 状态
data.tip string 状态提示
data.pageList.pageNum String 每页的页码
data.pageList.sourceUrl String 每页OCR识别的源图片地址
data.pageList.downUrl String 每页OCR识别的结果
data.pageList.status String 状态

# 扣量说明

  • 计量按PDF的页数
在线咨询
体验中心