C API 基础
头文件
C 版本 SDK 主要暴露以下头文件:
| 头文件 | 说明 |
|---|---|
compdf_common_c.h | License 校验、初始化、资源释放、页数、版本号以及 DocumentAI 模型配置。 |
compdf_conversion_c.h | PDF 转换相关 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
#endifCPDF_LicenseVerify 是一个例外,它的 license、device_id 和 app_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_ranges、font_name 这类字符串字段,生产代码建议使用带边界检查的拷贝函数。本文中的示例为简洁起见仍使用 strcpy。
错误码
大多数 C API 返回值都是 CSDKErrorCode。其中 e_CErrSuccess 表示调用成功,其他常见错误码如下:
| 错误码 | 含义 |
|---|---|
e_CErrFile | 文件不存在或无法打开。 |
e_CErrPDFPassword | PDF 密码无效。 |
e_CErrPDFFormat | PDF 格式无效或文件已损坏。 |
e_CErrOutOfMemory | 内存分配失败。 |
e_CErrLicenseInvalid | License 无效。 |
e_CErrLicenseExpire | License 已过期。 |
e_CErrLicenseConcurrencyExceeded | 当前转换并发数超出 License 限制。 |
e_CErrLicensePageLimitExceeded | 当前转换页数超出 License 限制。 |
e_CErrOCRFailure | OCR 识别失败。 |
e_CErrConverting | 当前已有转换任务在运行。 |
e_CErrUnknown | 未知错误。 |
调用转换 API 后,建议始终检查返回的错误码。