# 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的页数
在这篇文章中: