Skip to content

C API 基础

头文件

C 版本 SDK 主要暴露以下头文件:

头文件说明
compdf_common_c.hLicense 校验、初始化、资源释放、页数、版本号以及 DocumentAI 模型配置。
compdf_conversion_c.hPDF 转换相关 API。
compdf_basictypes_c.h错误码、转换选项、图片类型、OCR 语言以及其他公共 C 类型。

大多数转档代码至少需要包含以下头文件:

c
#include <stdbool.h>
#include <string.h>

#include "compdf_common_c.h"
#include "compdf_conversion_c.h"

平台字符串类型

大多数文件路径参数都使用 ComPDF_STRING

c
#if defined(_WIN32)
#define ComPDF_STRING const wchar_t*
#else
#define ComPDF_STRING const char*
#endif

在 Windows 上,请传入宽字符字符串,例如 L"input.pdf";在 Linux 和 macOS 上,请传入 UTF-8 编码的 const char*。为了兼容不同平台,本文示例统一使用以下辅助宏:

c
#if defined(_WIN32)
#define CPDF_TEXT(text) L##text
#else
#define CPDF_TEXT(text) text
#endif

CPDF_LicenseVerify 是一个例外,它的 licensedevice_idapp_id 参数始终是 const char*

转换选项初始化

CConvertOption 是一个普通的 C 结构体,没有构造函数,因此在使用前必须先初始化。下面的辅助函数与当前 C++ SDK 使用的默认值保持一致:

c
#include <string.h>

static CConvertOption CPDF_DefaultConvertOption(void)
{
    CConvertOption option;
    memset(&option, 0, sizeof(option));

    option.enable_ai_layout = true;
    option.enable_ai_table_recognition = true;
    option.contain_image = true;
    option.contain_page_background_image = true;
    option.json_contain_table = true;
    option.contain_annotation = true;
    option.transparent_text = true;
    option.txt_table_format = true;
    option.formula_to_image = true;
    option.auto_create_folder = true;
    option.image_scaling = 4.0f;
    option.page_layout_mode = e_PageLayoutModeFlow;
    option.excel_worksheet_option = e_CForTable;
    option.html_option = e_CSinglePage;
    option.ocr_option = e_CAll;
    option.image_color_mode = e_CColor;
    option.image_type = e_CJPG;

    return option;
}

您也可以先将结构体清零,再显式设置实际依赖的字段:

c
CConvertOption option = {0};
option.contain_image = true;
option.page_layout_mode = e_PageLayoutModeFlow;

对于 page_rangesfont_name 这类字符串字段,生产代码建议使用带边界检查的拷贝函数。本文中的示例为简洁起见仍使用 strcpy

错误码

大多数 C API 返回值都是 CSDKErrorCode。其中 e_CErrSuccess 表示调用成功,其他常见错误码如下:

错误码含义
e_CErrFile文件不存在或无法打开。
e_CErrPDFPasswordPDF 密码无效。
e_CErrPDFFormatPDF 格式无效或文件已损坏。
e_CErrOutOfMemory内存分配失败。
e_CErrLicenseInvalidLicense 无效。
e_CErrLicenseExpireLicense 已过期。
e_CErrLicenseConcurrencyExceeded当前转换并发数超出 License 限制。
e_CErrLicensePageLimitExceeded当前转换页数超出 License 限制。
e_CErrOCRFailureOCR 识别失败。
e_CErrConverting当前已有转换任务在运行。
e_CErrUnknown未知错误。

调用转换 API 后,建议始终检查返回的错误码。