JSON 作业配置

THPDFJobProcessor 接受描述有序 PDF 操作的 JSON 文档,并返回带每个操作状态的 JSON 结果

支持的操作

merge 使用 AppendPagesFromDocument 将多个输入 PDF 合并为单个输出文件

split 使用 ExtractLoadedPagesToPDF 将输入 PDF 的页面范围提取到单独的输出文件

optimise 以最低节省阈值重新压缩 FlateDecode 和 LZWDecode 流

encrypt 使用调用方指定的密码和密钥类型应用 AES-256、AES-128、RC4-128 或 RC4-40 加密

validate 运行内置验证策略并返回报告文本

JSON 模式

输入必须包含一个完整的 JSON 值:分隔符合法、容器闭合、字符串转义合法,字符串之外只允许 JSON 空白;尾随内容以及超出 Double 有限范围的数字都会被拒绝

解析器最多接受 64 层嵌套值,根值算第一层;畸形或嵌套过深的作业在任何操作运行之前即失败,部分解析出的值会被释放

输入是带 operations 数组的对象;每个操作有一个 type 字段和类型特定参数

输出是带 results 数组的对象;每个结果携带 type、status(ok、error 或 skipped)和操作特定字段

字符串值保留转义的 Unicode 字符,包括 \u0000;有限数字使用与区域设置无关的小数点,可以序列化为带符号 64 位范围之外的数值

数值以 Double 存储,精度遵循编译器运行时的浮点转换,因此超出其精确整数范围的整数在输入时可能被舍入;舍入后的值超出带符号整数范围时,GetInt 和 GetInt64 返回调用方提供的默认值

每操作预算

每个操作都可以包含带 memoryBytes、timeMilliseconds、objectCount、decompressionRatio 和 outputBytes 限制的 budget 对象

{"operations":[{"type":"optimise","input":"in.pdf","output":"out.pdf",
  "budget":{"memoryBytes":268435456,"timeMilliseconds":30000,
  "objectCount":1000000,"decompressionRatio":200,"outputBytes":1073741824}}]}

限制违规返回 status=budget-exceeded 以及 metric、observed、limit 和 elapsedMilliseconds,而不中止后续操作

内存预算也应用于每流和文档解码核算,因此在保留大缓冲区之前约束扩展

不透明句柄 API

HPDFDocCreate 返回一个不透明的 THPDFDocHandle,其中封装了一个 THotPDF 实例;HPDFDocLoadFromFile、HPDFDocGetPageCount、HPDFDocSaveLoadedDocument 和 HPDFDocRunJob 对该句柄进行操作;HPDFDocDestroy 负责释放它

这些源代码兼容的 Pascal 辅助函数仍可供 Delphi 和 C++Builder 调用方使用

HotPDF 稳定 C 回调 ABI 为随机访问输入、流式输出、取消、进度、诊断和不透明句柄生命周期提供扁平的版本化 C 边界