電子文檔解析接口從文檔本身的半結構化內容中解析出所包含的信息,提供包括pdf、word、excel、html、epub、mobi、markdown、txt的電子解析能力,生成文檔智能中支持的結構化對象。本文介紹了電子文檔解析API的調用方式。在調用OpenAPI接口前,請先閱讀API使用指南。
調用方式
電子文檔解析接口為同步接口,調用SubmitDigitalDocStructureJob或者SubmitDigitalDocStructureJobAdvance接口均可進行同步任務提交,等待超時時間可設置為5分鐘。
支持的格式:html、pdf、ppt、pptx、xlsx、xls、doc、docx、mobi、epub、markdown、txt。
調用電子文檔解析提交服務SubmitDigitalDocStructureJob接口
同步提交服務支持上傳本地文件和url文件兩種方式:
本地文件上傳的同步提交服務接口為:SubmitDigitalDocStructureJobAdvance接口。
url上傳的同步提交服務接口為:SubmitDigitalDocStructureJob接口。
請求參數
名稱 | 類型 | 必填 | 描述 | 示例值 |
FileUrl | string | 是 | 以文檔url方式時使用。單個文檔限制大小為150MB以內,頁數1.5萬頁以內。 | https://example.com/example.xlsx |
FileUrlObject | stream | 是 | 以本地文件上傳方式調用接口時使用。單個文檔限制大小為100MB以內,頁數為1000頁以內。 | 本地文件生成的FileInputStream |
FileName | string | 否 | 文件名需帶文件類型后綴,與fileNameExtension二選一。 | example.xlsx |
FileNameExtension | string | 否 | 文件類型,與fileName二選一。 | xlsx |
RevealMarkdown | boolean | 否 | 是否輸出markdown類型文本。 | true |
ImageStrategy | String | 否 | markdownContent中圖片存儲方式。 | url:提供oss url(含有效期) base64: 提供base64字段 |
UseUrlResponseBody | bool | 否 | 是否以url方式返回結果,默認為false。 | true |
開啟markdown輸出后,ImageStrategy才能生效。ImageStrategy參數用于控制markdown內圖片存儲方式,base64適合較小文件,建議小于1M的圖片使用base64。推薦使用url,但注意url會有時效期,一般為12小時。
根據您計算機的規(guī)格大小,如果上傳的文件較大或者文件內容較多 ,建議開啟UseUrlResponseBody,可以有效避免接口超時等問題,但注意url會有時效期,一般為12小時。
返回參數
名稱 | 類型 | 描述 | 示例值 |
RequestId | string | 請求唯一ID。 | 43A29C77-405E-4CC0-BC55-EE694AD0**** |
Id | String | 訂單ID。 | docmind-20220712-b15f**** |
Status | String | 同步任務處理完成的狀態(tài),最終處理結束后的狀態(tài)。Success為處理成功,Fail為處理失敗。 | Success |
Data | map | 返回數據,電子解析的解析結果,輸出包括文檔內容及樣式、文檔邏輯信息(層級樹)的JSON數據結構返回。 | - |
Code | string | 狀態(tài)碼。 | 200 |
Message | string | 詳細信息。 | Message |
使用示例
本接口支持本地文檔上傳和傳入文檔url這兩種調用方式。
以Java SDK為例,本地文檔上傳調用方式的請求示例代碼如下,調用電子文檔解析提交服務SubmitDigitalDocStructureJobAdvance接口,通過fileUrlObject參數實現本地文檔上傳。
說明獲取并使用AccessKey信息的方式,可參考SDK概述中不同語言的SDK使用指南。
import com.aliyun.docmind_api20220711.models.*; import com.aliyun.teaopenapi.models.Config; import com.aliyun.docmind_api20220711.Client; import com.aliyun.teautil.models.RuntimeOptions; import java.io.File; import java.io.FileInputStream; public static void main(String[] args) throws Exception { submit(); } public static void submit() throws Exception { // 使用默認憑證初始化Credentials Client。 com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(); Config config = new Config() // 通過credentials獲取配置中的AccessKey ID .setAccessKeyId(credentialClient.getAccessKeyId()) // 通過credentials獲取配置中的AccessKey Secret .setAccessKeySecret(credentialClient.getAccessKeySecret()); // 訪問的域名,支持ipv4和ipv6兩種方式,ipv6請使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com config.endpoint = "docmind-api.cn-hangzhou.aliyuncs.com"; Client client = new Client(config); // 創(chuàng)建RuntimeObject實例并設置運行參數 RuntimeOptions runtime = new RuntimeOptions(); SubmitDigitalDocStructureJobAdvanceRequest request = new SubmitDigitalDocStructureJobAdvanceRequest(); File file = new File("D:\\example.xlsx"); request.fileUrlObject = new FileInputStream(file); request.fileName = "example.xlsx"; request.revealMarkdown=true; // 發(fā)起請求并處理應答或異常。 SubmitDigitalDocStructureJobResponse response = client.submitDigitalDocStructureJobAdvance(request, runtimeOptions); System.out.println(JSON.toJSON(response.getBody())); }
const Client = require('@alicloud/docmind-api20220711'); const Credential = require('@alicloud/credentials'); const Util = require('@alicloud/tea-util'); const fs = require('fs'); const getResult = async () => { // 使用默認憑證初始化Credentials Client const cred = new Credential.default(); const client = new Client.default({ // 訪問的域名,支持ipv4和ipv6兩種方式,ipv6請使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com', // 通過credentials獲取配置中的AccessKey ID accessKeyId: cred.credential.accessKeyId, // 通過credentials獲取配置中的AccessKey Secret accessKeySecret: cred.credential.accessKeySecret, type: 'access_key', regionId: 'cn-hangzhou' }); const advanceRequest = new Client.SubmitDigitalDocStructureJobAdvanceRequest(); const file = fs.createReadStream('./example.pdf'); advanceRequest.fileUrlObject = file; advanceRequest.fileName = 'example.pdf'; const runtimeObject = new Util.RuntimeOptions({}); const response = await client.submitDigitalDocStructureJobAdvance(advanceRequest, runtimeObject); return response.body; };
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models from alibabacloud_tea_util.client import Client as UtilClient from alibabacloud_tea_util import models as util_models from alibabacloud_credentials.client import Client as CredClient if __name__ == '__main__': # 使用默認憑證初始化Credentials Client。 cred=CredClient() config = open_api_models.Config( # 通過credentials獲取配置中的AccessKey ID access_key_id=cred.get_credential().get_access_key_id(), # 通過credentials獲取配置中的AccessKey Secret access_key_secret=cred.get_credential().get_access_key_secret() ) # 訪問的域名 config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com' client = docmind_api20220711Client(config) request = docmind_api20220711_models.SubmitDigitalDocStructureJobAdvanceRequest( # file_url_object : 本地文件流 file_url_object=open("./example.xlsx", "rb"), # file_name :文件名稱。名稱必須包含文件類型 file_name='123.xlsx', reveal_markdown=True, # file_name_extension : 文件后綴格式。與文件名二選一 # file_name_extension='xlsx' ) runtime = util_models.RuntimeOptions() try: # 復制代碼運行請自行打印 API 的返回值 response = client.submit_digital_doc_structure_job_advance(request, runtime) # API返回值格式層級為 body -> data -> 具體屬性。 print(response.body) except Exception as error: # 如有需要,請打印 error UtilClient.assert_as_string(error.message)
import ( "fmt" "os" openClient "github.com/alibabacloud-go/darabonba-openapi/v2/client" "github.com/alibabacloud-go/docmind-api-20220711/client" "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/aliyun/credentials-go/credentials" ) func submit(){ // 使用默認憑證初始化Credentials Client。 credential, err := credentials.NewCredential(nil) // 通過credentials獲取配置中的AccessKey ID accessKeyId, err := credential.GetAccessKeyId() // 通過credentials獲取配置中的AccessKey Secret accessKeySecret, err := credential.GetAccessKeySecret() // 訪問的域名,支持ipv4和ipv6兩種方式,ipv6請使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com var endpoint string = "docmind-api.cn-hangzhou.aliyuncs.com" config := openClient.Config{AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, Endpoint: &endpoint} // 初始化client cli, err := client.NewClient(&config) if err != nil { panic(err) } // 上傳本地文檔調用接口 filename := "D:\\example.pdf" f, err := os.Open(filename) if err != nil { panic(err) } // 初始化接口request request := client.SubmitDigitalDocStructureJobAdvanceRequest{ FileName: &filename, FileUrlObject: f, } // 創(chuàng)建RuntimeObject實例并設置運行參數 options := service.RuntimeOptions{} response, err := cli.SubmitDigitalDocStructureJobAdvance(&request, &options) if err != nil { panic(err) } // 打印結果 fmt.Println(response.Body.String()) }
using Newtonsoft.Json; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Tea; using Tea.Utils; public static void SubmitFile() { // 使用默認憑證初始化Credentials Client。 var akCredential = new Aliyun.Credentials.Client(null); AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { // 通過credentials獲取配置中的AccessKey Secret AccessKeyId = akCredential.GetAccessKeyId(), // 通過credentials獲取配置中的AccessKey Secret AccessKeySecret = akCredential.GetAccessKeySecret(), }; // 訪問的域名 config.Endpoint = "docmind-api.cn-hangzhou.aliyuncs.com"; AlibabaCloud.SDK.Docmind_api20220711.Client client = new AlibabaCloud.SDK.Docmind_api20220711.Client(config); //需要安裝額外的依賴庫--> AlibabaCloud.DarabonbaStream Stream bodySyream = AlibabaCloud.DarabonbaStream.StreamUtil.ReadFromFilePath("<YOUR-FILE-PATH>"); AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobAdvanceRequest request = new AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobAdvanceRequest { FileUrlObject = bodySyream, FileNameExtension = "pdf" }; AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); try { // 復制代碼運行請自行打印 API 的返回值 client.SubmitDigitalDocStructureJobAdvance(request, runtime); } catch (TeaException error) { // 如有需要,請打印 error AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); // 如有需要,請打印 error AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); } }
以Java SDK為例,傳入文檔url調用方式的請求示例代碼如下,調用SubmitDigitalDocStructureJob接口,通過fileUrl參數實現傳入文檔url。請注意,您傳入的文檔url必須為公網可訪問下載的url地址,無跨域限制,url不帶特殊轉義字符。
說明獲取并使用AccessKey信息的方式,可參考SDK概述中不同語言的SDK使用指南。
import com.aliyun.docmind_api20220711.models.*; import com.aliyun.teaopenapi.models.Config; import com.aliyun.docmind_api20220711.Client; public static void main(String[] args) throws Exception { submit(); } public static void submit() throws Exception { // 使用默認憑證初始化Credentials Client。 com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(); Config config = new Config() // 通過credentials獲取配置中的AccessKey ID .setAccessKeyId(credentialClient.getAccessKeyId()) // 通過credentials獲取配置中的AccessKey Secret .setAccessKeySecret(credentialClient.getAccessKeySecret()); // 訪問的域名,支持ipv4和ipv6兩種方式,ipv6請使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com config.endpoint = "docmind-api.cn-hangzhou.aliyuncs.com"; Client client = new Client(config); SubmitDigitalDocStructureJobRequest request = new SubmitDigitalDocStructureJobRequest(); request.fileName = "example.xlsx"; request.fileUrl = "https://example.com/example.xlsx"; request.revealMarkdown=true; SubmitDigitalDocStructureJobResponse response = client.submitDigitalDocStructureJob(request); System.out.println(JSON.toJSON(response.getBody())); }
const Client = require('@alicloud/docmind-api20220711'); const Credential = require('@alicloud/credentials'); const getResult = async () => { // 使用默認憑證初始化Credentials Client const cred = new Credential.default(); const client = new Client.default({ // 訪問的域名,支持ipv4和ipv6兩種方式,ipv6請使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com', // 通過credentials獲取配置中的AccessKey ID accessKeyId: cred.credential.accessKeyId, // 通過credentials獲取配置中的AccessKey Secret accessKeySecret: cred.credential.accessKeySecret, type: 'access_key', regionId: 'cn-hangzhou' }); const request = new Client.SubmitDigitalDocStructureJobRequest(); request.fileName = 'example.pdf'; request.fileUrl = 'https://example.com/example.pdf'; const response = await client.submitDocStructureJob(request); return response.body; }
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models from alibabacloud_tea_util.client import Client as UtilClient from alibabacloud_credentials.client import Client as CredClient if __name__ == '__main__': # 使用默認憑證初始化Credentials Client。 cred=CredClient() config = open_api_models.Config( # 通過credentials獲取配置中的AccessKey ID access_key_id=cred.get_credential().get_access_key_id(), # 通過credentials獲取配置中的AccessKey Secret access_key_secret=cred.get_credential().get_access_key_secret() ) # 訪問的域名 config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com' client = docmind_api20220711Client(config) request = docmind_api20220711_models.SubmitDigitalDocStructureJobRequest( # file_url : 文件url地址 file_url='https://example.com/example.xlsx', # file_name :文件名稱。名稱必須包含文件類型 file_name='123.xlsx', reveal_markdown=True, # file_name_extension : 文件后綴格式。與文件名二選一 # file_name_extension='xlsx' ) try: # 復制代碼運行請自行打印 API 的返回值 response = client.submit_digital_doc_structure_job(request) # API返回值格式層級為 body -> data -> 具體屬性。 print(response.body) except Exception as error: # 如有需要,請打印 error UtilClient.assert_as_string(error.message)
import ( "fmt" openClient "github.com/alibabacloud-go/darabonba-openapi/v2/client" "github.com/alibabacloud-go/docmind-api-20220711/client" "github.com/aliyun/credentials-go/credentials" ) func submit(){ // 使用默認憑證初始化Credentials Client。 credential, err := credentials.NewCredential(nil) // 通過credentials獲取配置中的AccessKey ID accessKeyId, err := credential.GetAccessKeyId() // 通過credentials獲取配置中的AccessKey Secret accessKeySecret, err := credential.GetAccessKeySecret() // 訪問的域名,支持ipv4和ipv6兩種方式,ipv6請使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com var endpoint string = "docmind-api.cn-hangzhou.aliyuncs.com" config := openClient.Config{AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, Endpoint: &endpoint} // 初始化client cli, err := client.NewClient(&config) if err != nil { panic(err) } // 文件URL fileURL := "https://example.com/example.pdf" // 文件名 fileName := "example.pdf" // 初始化接口request request := client.SubmitDigitalDocStructureJobRequest{ FileUrl: &fileURL, FileName: &fileName, } response, err := cli.SubmitDigitalDocStructureJob(&request) if err != nil { panic(err) } // 打印結果 fmt.Println(response.Body.String()) }
using Newtonsoft.Json; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Tea; using Tea.Utils; public static void SubmitUrl() { // 使用默認憑證初始化Credentials Client。 var akCredential = new Aliyun.Credentials.Client(null); AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { // 通過credentials獲取配置中的AccessKey Secret AccessKeyId = akCredential.GetAccessKeyId(), // 通過credentials獲取配置中的AccessKey Secret AccessKeySecret = akCredential.GetAccessKeySecret(), }; // 訪問的域名 config.Endpoint = "docmind-api.cn-hangzhou.aliyuncs.com"; AlibabaCloud.SDK.Docmind_api20220711.Client client = new AlibabaCloud.SDK.Docmind_api20220711.Client(config); AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobRequest request = new AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobRequest { FileUrl = "https://example.pdf", FileNameExtension = "pdf" }; try { // 復制代碼運行請自行打印 API 的返回值 client.SubmitDigitalDocStructureJob(request); } catch (TeaException error) { // 如有需要,請打印 error AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); // 如有需要,請打印 error AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); } }
use AlibabaCloud\SDK\Docmindapi\V20220711\Docmindapi; use AlibabaCloud\SDK\Docmindapi\V20220711\Models\SubmitDocStructureJobRequest; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\Tea\Exception\TeaUnableRetryError; use AlibabaCloud\Credentials\Credential; // 使用默認憑證初始化Credentials Client。 $bearerToken = new Credential(); $config = new Config(); // 訪問的域名,支持ipv4和ipv6兩種方式,ipv6請使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com $config->endpoint = "docmind-api.cn-hangzhou.aliyuncs.com"; // 通過credentials獲取配置中的AccessKey ID $config->accessKeyId = $bearerToken->getCredential()->getAccessKeyId(); // 通過credentials獲取配置中的AccessKey Secret $config->accessKeySecret = $bearerToken->getCredential()->getAccessKeySecret(); $config->type = "access_key"; $config->regionId = "cn-hangzhou"; $client = new Docmindapi($config); $request = new SubmitDigitalDocStructureJobRequest(); $runtime = new RuntimeOptions(); $runtime->maxIdleConns = 3; $runtime->connectTimeout = 10000; $runtime->readTimeout = 10000; $request->fileName = "example.pdf"; $request->fileUrl = "https://example.com/example.pdf"; try { $response = $client->submitDigitalDocStructureJob($request, $runtime); var_dump($response->toMap()); } catch (TeaUnableRetryError $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }
處理成功后Status返回值為Success,表示處理成功。處理成功返回結果示例如下:
{
"data":{
"docInfo":{
"pageCountEstimate":3,
"docType":"pdf"
},
"styles":[ ],
"layouts":[
{
"pos":[
{
"x":0,
"y":0
},
{
"x":1113,
"y":0
},
{
"x":1113,
"y":1440
},
{
"x":0,
"y":1440
}
],
"index":0,
"subType":"none",
"text":"",
"type":"image",
"pageNum":[
0
],
"uniqueId":"31128703ac73c52f05717b3b654de020"
},
{
"pos":[
{
"x":0,
"y":0
},
{
"x":1113,
"y":0
},
{
"x":1113,
"y":1440
},
{
"x":0,
"y":1440
}
],
"index":0,
"subType":"none",
"text":"",
"type":"image",
"pageNum":[
1
],
"uniqueId":"25b2a6f63bdf57f0d7a4f3da67c8616a"
},
{
"pos":[
{
"x":0,
"y":0
},
{
"x":1113,
"y":0
},
{
"x":1113,
"y":1440
},
{
"x":0,
"y":1440
}
],
"index":0,
"subType":"none",
"text":"",
"type":"image",
"pageNum":[
2
],
"uniqueId":"8c651c04c72a029b4be4ed80aa57fbbd"
}
],
"version":"1.2.0",
"requestId":"docmind-20240820-6bf3e1bc1f164f0c99b8a12cfbcbeXXX"
},
"requestId":"1556A10B-E31C-5B21-8A5E-2179069D2XXX",
"id":"docmind-20240820-6bf3e1bc1f164f0c99b8a12cfbcbeXXX",
"status":"Success"
}
具體的處理結果在Data節(jié)點中,如下為Data節(jié)點的具體格式:
Data | object | 解析結果 |
styles | array | 樣式列表(全文檔中block的去重樣式列表)。 |
styleId | int | 樣式ID。 |
underline | bool | 是否有下劃線。 |
deleteLine | bool | 是否有刪除線。 |
bold | bool | 是否加粗。 |
fontSize | int | 字號大小。 |
fontName | string | 字體名稱。 |
color | string | 文字顏色。 |
charScale | float | 對齊寬高比例尺字體高度不變的情況下,寬度會有變化,計算邏輯為寬/高。 |
layouts | array | 版面信息列表。 |
uniqueId | string | 版面信息唯一ID。 |
index | int | 版面閱讀順序。 |
type | string | 版面類型(text/table/image)。 |
text | string | 文本內容。 |
markdownContent | string | markdown 文本內容(開啟參數后支持)。 |
alignment | string | 間距枚舉。 |
pos | array | 坐標。 |
pageNum | array | 版面所在頁數(可能多頁)。 |
numCol | int | 表格總列數(表格版面類型特有)。 |
numRow | int | 表格總行數(表格版面類型特有)。 |
cells | string | 單元格信息(類型是表格才有)。 |
cellId | string | 單元格Id(單個版面信息中唯一)。 |
cellUniqueId | string | 單元格Id(全局唯一)。 |
type | string | 單元格類型。 |
alignment | string | 單元格對齊方式。 |
pageNum | array | 單元格所在頁數(可能多頁)。 |
xsc | int | 起始單元格橫向是第幾列。 |
ysc | int | 起始單元格縱向是第幾行。 |
xec | int | 結束單元格橫向是第幾列。 |
yec | int | 結束單元格縱向是第幾行。 |
pos | array | 單元格坐標。 |
text | string | 單元格文本內容。 |
layouts | array | 內嵌版面信息。 |
logics | array | 邏輯信息列表。 |
docTree | array | 層級樹信息列表。 |
uniqueId | string | 層級樹節(jié)點的唯一ID。 |
level | int | 節(jié)點層級。 |
link | object | 子節(jié)點。 |
backlink | object | 父節(jié)點。 |
docInfo | object | 文檔信息。 |
docType | string | 文檔類型。 |
imageCount | int | 圖片數量。 |
tableCount | int | 表格數量。 |
pageCountEstimate | int | 文檔頁數。 |
paragraphCount | int | 段落數量。 |
tokens | long | 英文單詞數,或中文字數。 |
docUrl | string | 文檔url地址。 |
orignalDocName | string | 用戶提供的原始文檔名稱。 |
originalDocUrl | string | 用戶提供的原始文檔url地址。 |
pages | array | 文檔頁面列表。 |
場景示例
本內容闡述獲取JSON后,場景處理使用上建議和方案。
獲取markdown信息
GetDocStructureResult設置RevealMarkdown為true,ImageStrategy為url。
import json
response = json.load(open("demo.json", "r"))
doc_json = response["Data"]
markdown_str = ""
for layout in doc_json["layouts"]:
markdown_str += layout["markdownContent"] + "\n"
print(markdown_str)
獲取指定層級內容
SubmitDocStructureJob/SubmitDocStructureJobAdvance接口中,設置doc_tree或default,用于獲取文檔的結構信息。
import json
response = json.load(open("demo.json", "r"))
doc_json = response["Data"]
doc_tree = doc_json["logics"]["docTree"]
layout_cache: {} = {}
for layout in doc_json["layouts"]:
layout_cache[layout["uniqueId"]] = layout
layout["children"] = list()
for node in doc_tree:
father = node["backlink"]["上級"][0]
child = node["uniqueId"]
if father in layout_cache:
# 設置 子layout
layout_cache[father]["children"].append(layout_cache[child])
for layout in doc_json["layouts"]:
# 當前l(fā)ayout下的子layout
print(layout["children"])
附錄
doc-json數據結構
VERSION(STRING: DOC-JSON版本信息)
Doc-json | styles(array:無重復的樣式集合) |
layouts(array:版面信息列表,不包含坐標信息) | |
logics(object:邏輯信息,只含層級樹) | |
doclnfo(object:文檔信息) | |
version(string:doc-json版本信息) |
版面類型
文檔智能解析返回結果中,版面的類型type及子類型subType列表如下:
type(類型) | 類型描述 | subType(子類型) | 子類型描述 |
title | 標題 | 無 | 無 |
table | 表格 | 無 | 無 |
text | 普通文字 | para | 段落 |
figure | 圖表 | 無 | 圖片 |
head | 頁眉 | page_header | 頁眉 |
foot_pagenum | 頁腳頁碼 | page | 頁碼 |