Skip to content

通过回调使用自定义 AI 模型

概述

SDK v4.1.0 开始,ComPDF Conversion SDK 暴露了基于回调的扩展点,允许您插入自己的 AI 推理引擎来进行 OCR、版面分析和表格识别。您可以不再依赖通过 LibraryManager::SetDocumentAIModel 加载的内置 DocumentAI 模型,而是使用任何模型或服务运行推理,并将结果以 JSON 字符串返回给 SDK。

CConvertCallback 上注册了相关的回调对后,SDK 会跳过该能力的内置模型调用,转而使用您的 JSON 输出。如果回调对为 nullptr,SDK 会回退到内置模型。

回调对

每种 AI 能力使用两个回调:触发器(接收 PNG 图像路径,返回 bool)和结果获取器(返回 UTF-8 JSON C 字符串)。

能力触发器回调结果获取器回调触发条件
OCRocrget_ocr_resultenable_ocr = true
版面分析layoutget_layout_resultenable_ai_layout = trueenable_ocr = true
表格识别tableget_table_resultenable_ai_table_recognition = true 且检测到表格

两者必须同时设置。JSON 坐标位于图像像素空间(左上角原点)。

示例

c++
#include "compdf_conversion.h"
#include <string>

using namespace compdf;
using namespace compdf::common;
using namespace compdf::conversion;

static std::string g_ocr_json;
static std::string g_layout_json;
static std::string g_table_json;

bool my_ocr_trigger(const char* image_path) {
    g_ocr_json = run_my_ocr_model(image_path);
    return !g_ocr_json.empty();
}
const char* my_ocr_getter() { return g_ocr_json.c_str(); }

bool my_layout_trigger(const char* image_path) {
    g_layout_json = run_my_layout_model(image_path);
    return !g_layout_json.empty();
}
const char* my_layout_getter() { return g_layout_json.c_str(); }

bool my_table_trigger(const char* image_path) {
    g_table_json = run_my_table_model(image_path);
    return !g_table_json.empty();
}
const char* my_table_getter() { return g_table_json.c_str(); }

int main() {
    LibraryManager::LicenseVerify("<license>", "<device_id>", "<app_id>");
    LibraryManager::Initialize("resource");

    CConvertCallback callback   = {};
    callback.ocr                = &my_ocr_trigger;
    callback.get_ocr_result     = &my_ocr_getter;
    callback.layout             = &my_layout_trigger;
    callback.get_layout_result  = &my_layout_getter;
    callback.table              = &my_table_trigger;
    callback.get_table_result   = &my_table_getter;

    ConvertOptions opt;
    opt.enable_ocr       = true;
    opt.enable_ai_layout = true;
    opt.languages        = { OCRLanguage::e_English };

    CPDFConversion::StartPDFToWord("input.pdf", "", "output.docx", opt, &callback);
    return 0;
}

JSON 模式

OCR、版面分析和表格识别的 JSON 模式与 C SDK 相同,请参见 C 指南中的“通过回调使用自定义 AI 模型”