Objective-C API 参考
PDF Oxide 在 C ABI 之上提供了地道的 Objective-C 绑定(PdfOxide framework / PdfOxide CocoaPod)。NSObject 封装持有其原生句柄,并在 -dealloc 中释放(也可通过 -close 提前释放);返回的 C 字符串和缓冲区会被拷贝为 NSString/NSData,非成功状态码会以 POXErrorDomain 域中的 NSError 形式呈现。每个公共方法都被 POXApiCoverageTests 逐一覆盖。
# Podfile
pod 'PdfOxide', '~> 0.3.69'
#import <PdfOxide/POXPdfOxide.h>
如需 Rust API,参见 Rust API 参考。如需 Python API,参见 Python API 参考。如需 JavaScript API,参见 Node.js API 参考 或 WASM API 参考。
所有页索引均从 0 开始。边界框使用 PDF 用户空间点(point)表示的 POXBbox { float x; float y; float width; float height; };PDF 版本以 POXVersion { uint8_t major; uint8_t minor; } 形式报告。
POXDocument
用于打开、提取、渲染和检查 PDF 的主类。
打开文档
+ (nullable instancetype)openPath:(NSString*)path error:(NSError**)error;
从文件系统路径打开一个 PDF。
+ (nullable instancetype)openFromBytes:(NSData*)data error:(NSError**)error;
从内存中的字节数据打开一个 PDF。
+ (nullable instancetype)openWithPassword:(NSString*)path password:(NSString*)password error:(NSError**)error;
一步打开受密码保护的 PDF。
+ (nullable instancetype)openFromDocxBytes:(NSData*)data error:(NSError**)error;
+ (nullable instancetype)openFromPptxBytes:(NSData*)data error:(NSError**)error;
+ (nullable instancetype)openFromXlsxBytes:(NSData*)data error:(NSError**)error;
将内存中的 Office 文档字节(Word/PowerPoint/Excel)转换为已打开的 PDF 文档。
- (BOOL)authenticate:(NSString*)password error:(NSError**)error;
在打开加密文档后进行身份验证;成功返回 YES,密码错误返回 NO。
Office 导出
- (nullable NSData*)toDocxWithError:(NSError**)error;
- (nullable NSData*)toPptxWithError:(NSError**)error;
- (nullable NSData*)toXlsxWithError:(NSError**)error;
将文档导出为 Word / PowerPoint / Excel 字节数据。
文档信息
- (NSInteger)pageCountError:(NSError**)error;
页数;出错时返回 -1。
- (POXVersion)version;
以 POXVersion 结构体表示的 PDF 版本。
- (BOOL)isEncrypted;
- (BOOL)hasStructureTree;
- (BOOL)hasXfa;
查询是否加密、是否存在带标签 PDF 的结构树,以及是否存在 XFA 表单。
文本与转换
- (nullable NSString*)extractText:(NSInteger)page error:(NSError**)error;
从单页提取纯文本。
- (nullable NSString*)toPlainText:(NSInteger)page error:(NSError**)error;
- (nullable NSString*)toMarkdown:(NSInteger)page error:(NSError**)error;
- (nullable NSString*)toHtml:(NSInteger)page error:(NSError**)error;
将单页转换为纯文本、Markdown 或 HTML。
- (nullable NSString*)toPlainTextAllWithError:(NSError**)error;
- (nullable NSString*)toMarkdownAllWithError:(NSError**)error;
- (nullable NSString*)toHtmlAllWithError:(NSError**)error;
将所有页面转换为纯文本、Markdown 或 HTML。
- (nullable NSString*)extractStructuredJson:(NSInteger)page error:(NSError**)error;
将一页提取为结构化 JSON(文本片段、几何信息、字体)。
元素提取
- (nullable NSArray<POXChar*>*)extractChars:(NSInteger)page error:(NSError**)error;
- (nullable NSArray<POXWord*>*)extractWords:(NSInteger)page error:(NSError**)error;
- (nullable NSArray<POXTextLine*>*)extractTextLines:(NSInteger)page error:(NSError**)error;
- (nullable NSArray<POXTable*>*)extractTables:(NSInteger)page error:(NSError**)error;
提取字符、单词、文本行和表格,并附带定位元数据。
- (nullable NSArray<POXFont*>*)embeddedFonts:(NSInteger)page error:(NSError**)error;
- (nullable NSArray<POXImage*>*)embeddedImages:(NSInteger)page error:(NSError**)error;
- (nullable NSArray<POXAnnotation*>*)pageAnnotations:(NSInteger)page error:(NSError**)error;
- (nullable NSArray<POXPath*>*)extractPaths:(NSInteger)page error:(NSError**)error;
提取嵌入字体、嵌入图像、页面注释和矢量路径。
搜索
- (nullable NSArray<POXSearchResult*>*)search:(NSInteger)page term:(NSString*)term caseSensitive:(BOOL)caseSensitive error:(NSError**)error;
在单页中搜索 term。
- (nullable NSArray<POXSearchResult*>*)searchAll:(NSString*)term caseSensitive:(BOOL)caseSensitive error:(NSError**)error;
在整个文档中搜索 term。
区域内提取
- (nullable NSString*)extractTextInRect:(NSInteger)page x:(float)x y:(float)y width:(float)width height:(float)height error:(NSError**)error;
- (nullable NSArray<POXWord*>*)extractWordsInRect:(NSInteger)page x:(float)x y:(float)y width:(float)width height:(float)height error:(NSError**)error;
- (nullable NSArray<POXTextLine*>*)extractLinesInRect:(NSInteger)page x:(float)x y:(float)y width:(float)width height:(float)height error:(NSError**)error;
- (nullable NSArray<POXTable*>*)extractTablesInRect:(NSInteger)page x:(float)x y:(float)y width:(float)width height:(float)height error:(NSError**)error;
- (nullable NSArray<POXImage*>*)extractImagesInRect:(NSInteger)page x:(float)x y:(float)y width:(float)width height:(float)height error:(NSError**)error;
提取限定在矩形区域(用户空间点)内的文本、单词、行、表格或图像。
自动提取与分类
- (nullable NSString*)extractTextAuto:(NSInteger)page error:(NSError**)error;
为一页自动选择原生文本提取或 OCR。
- (nullable NSString*)extractAllTextWithError:(NSError**)error;
提取整个文档的文本。
- (nullable NSString*)extractPageAuto:(NSInteger)page optionsJson:(nullable NSString*)optionsJson error:(NSError**)error;
使用 JSON 选项数据自动提取一页。
- (nullable NSString*)classifyPage:(NSInteger)page error:(NSError**)error;
- (nullable NSString*)classifyDocumentWithError:(NSError**)error;
对单页或整个文档进行分类(返回分类 JSON)。
页眉 / 页脚 / 伪影移除
- (int32_t)eraseHeader:(NSInteger)page error:(NSError**)error;
- (int32_t)eraseFooter:(NSInteger)page error:(NSError**)error;
- (int32_t)eraseArtifacts:(NSInteger)page error:(NSError**)error;
擦除单页上的页眉、页脚或伪影;返回移除的数量。
- (int32_t)removeHeaders:(float)threshold error:(NSError**)error;
- (int32_t)removeFooters:(float)threshold error:(NSError**)error;
- (int32_t)removeArtifacts:(float)threshold error:(NSError**)error;
按相似度 threshold 在全文档范围内移除重复出现的页眉、页脚或伪影。
表单
- (nullable NSArray<POXFormField*>*)formFieldsWithError:(NSError**)error;
获取所有 AcroForm 字段。
- (nullable NSData*)exportFormDataToBytes:(int32_t)formatType error:(NSError**)error;
将表单数据导出为 FDF/XFDF 字节数据(formatType 用于选择格式)。
- (BOOL)importFormDataFromPath:(NSString*)dataPath error:(NSError**)error;
- (BOOL)importFormFromFile:(NSString*)filename error:(NSError**)error;
从 FDF/XFDF 文件导入表单数据。
结构与元数据
- (nullable NSString*)outlineWithError:(NSError**)error;
- (nullable NSString*)pageLabelsWithError:(NSError**)error;
- (nullable NSString*)xmpMetadataWithError:(NSError**)error;
以 JSON 形式获取文档大纲(书签)、页面标签范围和 XMP 元数据。
- (nullable NSData*)sourceBytesWithError:(NSError**)error;
获取原始 PDF 源字节数据。
- (nullable NSString*)planSplitByBookmarks:(nullable NSString*)optionsJson error:(NSError**)error;
按顶层书签计算分组拆分方案(返回 JSON)。
以 JSON 形式获取注释 / 字体 / 搜索结果
- (nullable NSString*)annotationsJson:(NSInteger)page error:(NSError**)error;
- (nullable NSString*)embeddedFontsJson:(NSInteger)page error:(NSError**)error;
- (nullable NSString*)searchJson:(NSInteger)page term:(NSString*)term caseSensitive:(BOOL)caseSensitive error:(NSError**)error;
页面注释、嵌入字体和按页搜索结果的 JSON 序列化版本。
页面几何与元素
- (float)pageWidth:(NSInteger)pageIndex error:(NSError**)error;
- (float)pageHeight:(NSInteger)pageIndex error:(NSError**)error;
- (int32_t)pageRotation:(NSInteger)pageIndex error:(NSError**)error;
页面宽度、高度和旋转角度(出错时返回 -1)。
- (nullable POXElementList*)pageElements:(NSInteger)pageIndex error:(NSError**)error;
获取一页的布局元素列表。参见 POXElementList。
- (POXPage*)pageAtIndex:(NSInteger)index;
获取绑定到此文档的页面句柄。参见 POXPage。
渲染
- (nullable POXRenderedImage*)renderPage:(NSInteger)pageIndex format:(int32_t)format error:(NSError**)error;
将一页渲染为图像(format 0 = PNG,1 = JPEG)。
- (nullable POXRenderedImage*)renderPageZoom:(NSInteger)pageIndex zoom:(float)zoom format:(int32_t)format error:(NSError**)error;
- (nullable POXRenderedImage*)renderPageThumbnail:(NSInteger)pageIndex size:(int32_t)size format:(int32_t)format error:(NSError**)error;
以指定缩放系数渲染一页,或以目标最长边 size 渲染为缩略图。
- (nullable POXRenderedImage*)renderPageWithOptions:(NSInteger)pageIndex
dpi:(int32_t)dpi
format:(int32_t)format
bgR:(float)bgR bgG:(float)bgG bgB:(float)bgB bgA:(float)bgA
transparentBackground:(int32_t)transparentBackground
renderAnnotations:(int32_t)renderAnnotations
jpegQuality:(int32_t)jpegQuality
error:(NSError**)error;
使用完整选项集渲染(DPI、RGBA 背景色、透明度、注释标志、JPEG 质量)。
- (nullable POXRenderedImage*)renderPageWithOptionsEx:(NSInteger)pageIndex
dpi:(int32_t)dpi
format:(int32_t)format
bgR:(float)bgR bgG:(float)bgG bgB:(float)bgB bgA:(float)bgA
transparentBackground:(int32_t)transparentBackground
renderAnnotations:(int32_t)renderAnnotations
jpegQuality:(int32_t)jpegQuality
excludedLayers:(NSArray<NSString*>*)excludedLayers
error:(NSError**)error;
与 renderPageWithOptions: 类似,但额外支持抑制指定名称的 OCG 图层。
- (nullable POXRenderedImage*)renderPageRegion:(NSInteger)pageIndex cropX:(float)cropX cropY:(float)cropY cropWidth:(float)cropWidth cropHeight:(float)cropHeight format:(int32_t)format error:(NSError**)error;
渲染一页的矩形区域(用户空间点,原点在左下角)。
- (nullable POXRenderedImage*)renderPageFit:(NSInteger)pageIndex w:(int32_t)w h:(int32_t)h format:(int32_t)format error:(NSError**)error;
将一页渲染为适配 w × h 像素的尺寸,并保持纵横比。
- (nullable POXRenderedImage*)renderPageRaw:(NSInteger)pageIndex dpi:(int32_t)dpi outWidth:(int32_t*)outWidth outHeight:(int32_t*)outHeight error:(NSError**)error;
将一页渲染为原始 RGBA8888 缓冲区;输出参数接收像素尺寸。
- (int32_t)estimateRenderTime:(NSInteger)pageIndex error:(NSError**)error;
估算一页的渲染耗时(引擎单位),出错时返回 -1。
OCR
- (BOOL)pageNeedsOcr:(NSInteger)pageIndex error:(NSError**)error;
判断一页是否缺少可提取文本,从而需要 OCR。
- (nullable NSString*)ocrExtractText:(NSInteger)pageIndex engine:(nullable POXOcrEngine*)engine error:(NSError**)error;
使用 OCR 提取文本;传入 nil 表示仅使用原生文本。参见 POXOcrEngine。
合规性校验
- (nullable POXPdfAResults*)validatePdfA:(int32_t)level error:(NSError**)error;
- (nullable POXUaResults*)validatePdfUa:(int32_t)level error:(NSError**)error;
- (nullable POXPdfXResults*)validatePdfX:(int32_t)level error:(NSError**)error;
校验 PDF/A、PDF/UA 或 PDF/X 合规性;level 用于选择子级别。返回一个结果句柄。
- (BOOL)convertToPdfA:(int32_t)level error:(NSError**)error;
将文档转换为给定合规级别的 PDF/A。
签名(文档级)
- (BOOL)sign:(POXCertificate*)certificate reason:(nullable NSString*)reason location:(nullable NSString*)location error:(NSError**)error;
使用已加载的证书应用基本数字签名。
- (int32_t)signatureCountWithError:(NSError**)error;
- (nullable POXSignatureInfo*)signatureAtIndex:(int32_t)index error:(NSError**)error;
- (int32_t)verifyAllSignaturesWithError:(NSError**)error;
- (int32_t)hasTimestampWithError:(NSError**)error;
- (nullable POXDss*)dssWithError:(NSError**)error;
统计签名数量、获取签名信息、验证全部签名、检查文档时间戳是否存在,以及读取文档安全存储(Document Security Store)。
生命周期
- (void)close;
立即释放原生句柄(幂等)。
POXPage
绑定到某个 POXDocument 的页面句柄(从 0 开始)。它持有对其文档的强引用,因此不会比文档存活更久。
- (nullable NSString*)text:(NSError**)error;
- (nullable NSString*)markdown:(NSError**)error;
- (nullable NSString*)html:(NSError**)error;
- (nullable NSString*)plainText:(NSError**)error;
提取此页的文本、Markdown、HTML 或保留版式的纯文本。
POXPdf
由构建器或包装工厂生成的 PDF。
构造方法
+ (nullable instancetype)fromMarkdown:(NSString*)markdown error:(NSError**)error;
+ (nullable instancetype)fromHtml:(NSString*)html error:(NSError**)error;
+ (nullable instancetype)fromText:(NSString*)text error:(NSError**)error;
从 Markdown、HTML 或纯文本构建 PDF。
+ (nullable instancetype)fromImage:(NSString*)path error:(NSError**)error;
+ (nullable instancetype)fromImageBytes:(NSData*)data error:(NSError**)error;
构建包装图像文件或内存中图像字节数据的单页 PDF。
+ (nullable instancetype)fromHtml:(NSString*)html css:(NSString*)css fontBytes:(nullable NSData*)fontBytes error:(NSError**)error;
从 HTML + CSS 构建 PDF,并附带一个可选的内嵌字体。
+ (nullable instancetype)fromHtml:(NSString*)html css:(NSString*)css families:(NSArray<NSString*>*)families fonts:(NSArray<NSData*>*)fonts error:(NSError**)error;
从 HTML + CSS 构建 PDF,并使用多字体级联方案(成对的 families/fonts 数组)。
方法
- (BOOL)saveToPath:(NSString*)path error:(NSError**)error;
- (nullable NSData*)toBytesWithError:(NSError**)error;
- (NSInteger)pageCountError:(NSError**)error;
- (void)close;
保存到路径、获取 PDF 字节数据、获取页数(出错时返回 -1),或释放原生句柄。
POXDocumentEditor
为就地编辑而打开的 PDF。状态码类操作会将失败信息以 NSError 形式呈现;is* 查询方法返回 BOOL。
打开文档
+ (nullable instancetype)openEditor:(NSString*)path error:(NSError**)error;
+ (nullable instancetype)openFromBytes:(NSData*)data error:(NSError**)error;
从路径或内存字节数据打开一个用于编辑的 PDF。
状态与元数据
- (NSInteger)pageCountError:(NSError**)error;
- (POXVersion)version;
- (BOOL)isModified;
- (nullable NSString*)sourcePathError:(NSError**)error;
页数、PDF 版本、待处理修改标志,以及编辑器的源路径。
- (nullable NSString*)producerError:(NSError**)error;
- (BOOL)setProducer:(NSString*)value error:(NSError**)error;
- (nullable NSString*)creationDateError:(NSError**)error;
- (BOOL)setCreationDate:(NSString*)date error:(NSError**)error;
获取/设置文档的 /Info.Producer 和 /Info.CreationDate。
页面操作
- (BOOL)deletePage:(NSInteger)page error:(NSError**)error;
- (BOOL)movePageFrom:(NSInteger)from to:(NSInteger)to error:(NSError**)error;
删除或重排页面。
- (BOOL)rotatePage:(NSInteger)page byDegrees:(NSInteger)degrees error:(NSError**)error;
- (BOOL)rotateAllPages:(NSInteger)degrees error:(NSError**)error;
- (BOOL)setPageRotation:(NSInteger)page degrees:(NSInteger)degrees error:(NSError**)error;
- (NSInteger)pageRotation:(NSInteger)page error:(NSError**)error;
旋转单页、旋转所有页面、设置绝对旋转角度,或读取当前旋转角度。
- (BOOL)cropMarginsLeft:(float)left right:(float)right top:(float)top bottom:(float)bottom error:(NSError**)error;
按边距裁剪所有页面。
- (POXBbox)pageCropBox:(NSInteger)page error:(NSError**)error;
- (BOOL)setPageCropBox:(NSInteger)page box:(POXBbox)box error:(NSError**)error;
- (POXBbox)pageMediaBox:(NSInteger)page error:(NSError**)error;
- (BOOL)setPageMediaBox:(NSInteger)page box:(POXBbox)box error:(NSError**)error;
获取/设置一页的 CropBox 和 MediaBox。
编辑(涂黑遮盖)
- (BOOL)applyAllRedactions:(NSError**)error;
- (BOOL)applyPageRedactions:(NSInteger)page error:(NSError**)error;
- (BOOL)isPageMarkedForRedaction:(NSInteger)page;
- (BOOL)unmarkPageForRedaction:(NSInteger)page error:(NSError**)error;
应用排队中的涂黑遮盖(全部或按页)、查询及取消页面的涂黑遮盖标记。
- (BOOL)redactionAddPage:(NSInteger)page x1:(double)x1 y1:(double)y1 x2:(double)x2 y2:(double)y2 r:(double)r g:(double)g b:(double)b error:(NSError**)error;
- (int32_t)redactionCount:(NSInteger)page error:(NSError**)error;
- (int32_t)redactionApplyScrubMetadata:(BOOL)scrubMetadata r:(double)r g:(double)g b:(double)b error:(NSError**)error;
- (int32_t)redactionScrubMetadataWithError:(NSError**)error;
几何涂黑遮盖:排队一个填充矩形、统计已排队的矩形数量、破坏性地应用涂黑遮盖(返回被移除的字形数量),以及独立的元数据/JS/嵌入文件清理。
区域擦除
- (BOOL)eraseRegion:(NSInteger)page x:(float)x y:(float)y w:(float)w h:(float)h error:(NSError**)error;
- (BOOL)eraseRegions:(NSInteger)page rects:(NSArray<NSValue*>*)rects error:(NSError**)error;
- (BOOL)clearEraseRegions:(NSInteger)page error:(NSError**)error;
擦除单个矩形、多个以 POXBbox 表示的矩形,或清除待处理的擦除操作。
扁平化
- (BOOL)flattenForms:(NSError**)error;
- (BOOL)flattenFormsOnPage:(NSInteger)page error:(NSError**)error;
- (BOOL)flattenAnnotations:(NSInteger)page error:(NSError**)error;
- (BOOL)flattenAllAnnotations:(NSError**)error;
扁平化所有表单、某一页上的表单、某一页上的注释,或所有注释。
- (NSInteger)flattenWarningsCount;
- (nullable NSString*)flattenWarning:(NSInteger)index error:(NSError**)error;
- (BOOL)isPageMarkedForFlatten:(NSInteger)page;
- (BOOL)unmarkPageForFlatten:(NSInteger)page error:(NSError**)error;
检查扁平化警告以及每页的扁平化标记。
表单
- (BOOL)setFormField:(NSString*)name value:(NSString*)value error:(NSError**)error;
- (BOOL)importFdfBytes:(NSData*)data error:(NSError**)error;
- (BOOL)importXfdfBytes:(NSData*)data error:(NSError**)error;
按名称设置表单字段值;导入原始 FDF / XFDF 字节数据。
合并 / 转换 / 嵌入
- (BOOL)mergeFrom:(NSString*)sourcePath error:(NSError**)error;
- (BOOL)mergeFromBytes:(NSData*)data error:(NSError**)error;
- (BOOL)convertToPdfA:(NSInteger)level error:(NSError**)error;
- (BOOL)embedFile:(NSString*)name data:(NSData*)data error:(NSError**)error;
- (nullable NSData*)extractPagesToBytes:(NSArray<NSNumber*>*)pages error:(NSError**)error;
合并另一个 PDF(路径或字节数据)、就地转换为 PDF/A、附加一个嵌入文件,或将部分页面提取到一个新的内存 PDF 中。
条形码
- (BOOL)addBarcode:(POXBarcode*)barcode page:(NSInteger)page x:(float)x y:(float)y width:(float)width height:(float)height error:(NSError**)error;
在一页上放置生成的条形码。参见 POXBarcode。
保存
- (BOOL)saveToPath:(NSString*)path error:(NSError**)error;
- (nullable NSData*)saveToBytesWithError:(NSError**)error;
- (nullable NSData*)saveToBytesCompress:(BOOL)compress garbageCollect:(BOOL)garbageCollect linearize:(BOOL)linearize error:(NSError**)error;
- (BOOL)saveEncryptedToPath:(NSString*)path userPassword:(NSString*)userPassword ownerPassword:(NSString*)ownerPassword error:(NSError**)error;
- (nullable NSData*)saveEncryptedToBytesWithUserPassword:(NSString*)userPassword ownerPassword:(NSString*)ownerPassword error:(NSError**)error;
- (void)close;
保存到路径或字节数据(可选压缩/垃圾回收/线性化)、以 AES 加密保存到路径或字节数据,或释放原生句柄。
POXDocumentBuilder
用于构建全新 PDF 的链式构建器。
+ (nullable instancetype)createWithError:(NSError**)error;
创建一个新的空文档构建器。
元数据
- (BOOL)setTitle:(NSString*)title error:(NSError**)error;
- (BOOL)setAuthor:(NSString*)author error:(NSError**)error;
- (BOOL)setSubject:(NSString*)subject error:(NSError**)error;
- (BOOL)setKeywords:(NSString*)keywords error:(NSError**)error;
- (BOOL)setCreator:(NSString*)creator error:(NSError**)error;
- (BOOL)onOpen:(NSString*)script error:(NSError**)error;
设置文档元数据以及文档级的打开 JavaScript 动作。
带标签 / 无障碍 PDF
- (BOOL)taggedPdfUa1:(NSError**)error;
- (BOOL)language:(NSString*)lang error:(NSError**)error;
- (BOOL)roleMapCustom:(NSString*)custom standard:(NSString*)standard error:(NSError**)error;
启用 PDF/UA-1 标签、设置文档语言,并添加一条自定义到标准角色的映射条目。
字体
- (BOOL)registerEmbeddedFont:(NSString*)name font:(POXEmbeddedFont*)font error:(NSError**)error;
以 name 注册一个 TTF/OTF 字体(转移该字体原生句柄的所有权)。参见 POXEmbeddedFont。
页面
- (nullable POXPageBuilder*)a4PageWithError:(NSError**)error;
- (nullable POXPageBuilder*)letterPageWithError:(NSError**)error;
- (nullable POXPageBuilder*)pageWithWidth:(float)width height:(float)height error:(NSError**)error;
开始一个 A4、US-Letter 或自定义尺寸的页面。参见 POXPageBuilder。
构建 / 保存
- (nullable NSData*)buildWithError:(NSError**)error;
- (BOOL)saveToPath:(NSString*)path error:(NSError**)error;
- (BOOL)saveEncryptedToPath:(NSString*)path userPassword:(NSString*)userPassword ownerPassword:(NSString*)ownerPassword error:(NSError**)error;
- (nullable NSData*)toBytesEncryptedWithUserPassword:(NSString*)userPassword ownerPassword:(NSString*)ownerPassword error:(NSError**)error;
- (void)close;
构建 PDF 字节数据、保存到路径、以 AES 加密保存到路径或字节数据,或释放原生句柄。
POXPageBuilder
在 POXDocumentBuilder 内构建的一个页面。大多数操作返回 BOOL 并通过父构建器进行链式调用。调用 -done: 提交该页,或调用 -close 丢弃它。
文本排版
- (BOOL)font:(NSString*)name size:(float)size error:(NSError**)error;
- (BOOL)at:(float)x y:(float)y error:(NSError**)error;
- (BOOL)text:(NSString*)text error:(NSError**)error;
- (BOOL)heading:(uint8_t)level text:(NSString*)text error:(NSError**)error;
- (BOOL)paragraph:(NSString*)text error:(NSError**)error;
- (BOOL)space:(float)points error:(NSError**)error;
- (BOOL)horizontalRule:(NSError**)error;
- (BOOL)newline:(NSError**)error;
- (BOOL)newPageSameSize:(NSError**)error;
设置字体、光标位置,并输出文本、标题、段落、垂直间距、水平分隔线、换行,或一个尺寸相同的新页面。
- (BOOL)textInRectX:(float)x y:(float)y w:(float)w h:(float)h text:(NSString*)text align:(int32_t)align error:(NSError**)error;
在矩形区域内排布自动换行、对齐的文本。
行内文本片段
- (BOOL)inlineText:(NSString*)text error:(NSError**)error;
- (BOOL)inlineBold:(NSString*)text error:(NSError**)error;
- (BOOL)inlineItalic:(NSString*)text error:(NSError**)error;
- (BOOL)inlineColorR:(float)r g:(float)g b:(float)b text:(NSString*)text error:(NSError**)error;
追加行内文本片段(普通、粗体、斜体或 RGB 着色)。
脚注 / 分栏
- (BOOL)footnoteRefMark:(NSString*)refMark noteText:(NSString*)noteText error:(NSError**)error;
- (BOOL)columnsCount:(uint32_t)columnCount gapPt:(float)gapPt text:(NSString*)text error:(NSError**)error;
添加脚注引用标记 + 注释文本,或将文本排入多栏。
链接与动作
- (BOOL)linkUrl:(NSString*)url error:(NSError**)error;
- (BOOL)linkPage:(NSInteger)page error:(NSError**)error;
- (BOOL)linkNamed:(NSString*)destination error:(NSError**)error;
- (BOOL)linkJavascript:(NSString*)script error:(NSError**)error;
- (BOOL)onOpen:(NSString*)script error:(NSError**)error;
- (BOOL)onClose:(NSString*)script error:(NSError**)error;
添加 URL / 页面 / 命名目标 / JavaScript 链接,以及页面打开/关闭动作。
表单字段 JS 动作
- (BOOL)fieldKeystroke:(NSString*)script error:(NSError**)error;
- (BOOL)fieldFormat:(NSString*)script error:(NSError**)error;
- (BOOL)fieldValidate:(NSString*)script error:(NSError**)error;
- (BOOL)fieldCalculate:(NSString*)script error:(NSError**)error;
为最近添加的字段附加按键 / 格式化 / 校验 / 计算 JavaScript。
文本装饰
- (BOOL)highlightR:(float)r g:(float)g b:(float)b error:(NSError**)error;
- (BOOL)underlineR:(float)r g:(float)g b:(float)b error:(NSError**)error;
- (BOOL)strikeoutR:(float)r g:(float)g b:(float)b error:(NSError**)error;
- (BOOL)squigglyR:(float)r g:(float)g b:(float)b error:(NSError**)error;
为前一个文本元素应用高亮、下划线、删除线或波浪线装饰。
注释
- (BOOL)stickyNote:(NSString*)text error:(NSError**)error;
- (BOOL)stickyNoteAt:(float)x y:(float)y text:(NSString*)text error:(NSError**)error;
- (BOOL)watermark:(NSString*)text error:(NSError**)error;
- (BOOL)watermarkConfidential:(NSError**)error;
- (BOOL)watermarkDraft:(NSError**)error;
- (BOOL)stamp:(NSString*)typeName error:(NSError**)error;
- (BOOL)freetextAtX:(float)x y:(float)y w:(float)w h:(float)h text:(NSString*)text error:(NSError**)error;
添加便签、水印(自定义 / CONFIDENTIAL / DRAFT)、一个命名图章,以及自由文本注释。
表单字段
- (BOOL)textFieldName:(NSString*)name x:(float)x y:(float)y w:(float)w h:(float)h defaultValue:(nullable NSString*)defaultValue error:(NSError**)error;
- (BOOL)checkboxName:(NSString*)name x:(float)x y:(float)y w:(float)w h:(float)h checked:(BOOL)checked error:(NSError**)error;
- (BOOL)comboBoxName:(NSString*)name x:(float)x y:(float)y w:(float)w h:(float)h options:(NSArray<NSString*>*)options selected:(nullable NSString*)selected error:(NSError**)error;
- (BOOL)radioGroupName:(NSString*)name values:(NSArray<NSString*>*)values xs:(NSArray<NSNumber*>*)xs ys:(NSArray<NSNumber*>*)ys ws:(NSArray<NSNumber*>*)ws hs:(NSArray<NSNumber*>*)hs selected:(nullable NSString*)selected error:(NSError**)error;
- (BOOL)pushButtonName:(NSString*)name x:(float)x y:(float)y w:(float)w h:(float)h caption:(NSString*)caption error:(NSError**)error;
- (BOOL)signatureFieldName:(NSString*)name x:(float)x y:(float)y w:(float)w h:(float)h error:(NSError**)error;
添加文本字段、复选框、下拉框、单选组、按钮和签名字段。
条形码
- (BOOL)barcode1d:(int32_t)barcodeType data:(NSString*)data x:(float)x y:(float)y w:(float)w h:(float)h error:(NSError**)error;
- (BOOL)barcodeQrData:(NSString*)data x:(float)x y:(float)y size:(float)size error:(NSError**)error;
直接在页面上绘制一维条形码或二维码。
图像
- (BOOL)image:(NSData*)bytes x:(float)x y:(float)y w:(float)w h:(float)h error:(NSError**)error;
- (BOOL)imageWithAlt:(NSData*)bytes x:(float)x y:(float)y w:(float)w h:(float)h altText:(NSString*)altText error:(NSError**)error;
- (BOOL)imageArtifact:(NSData*)bytes x:(float)x y:(float)y w:(float)w h:(float)h error:(NSError**)error;
放置一张图像、一张带无障碍替代文本的图像,或一张装饰性(artifact)图像。
矢量图形
- (BOOL)rectX:(float)x y:(float)y w:(float)w h:(float)h error:(NSError**)error;
- (BOOL)filledRectX:(float)x y:(float)y w:(float)w h:(float)h r:(float)r g:(float)g b:(float)b error:(NSError**)error;
- (BOOL)lineX1:(float)x1 y1:(float)y1 x2:(float)x2 y2:(float)y2 error:(NSError**)error;
- (BOOL)strokeRectX:(float)x y:(float)y w:(float)w h:(float)h width:(float)width r:(float)r g:(float)g b:(float)b error:(NSError**)error;
- (BOOL)strokeLineX1:(float)x1 y1:(float)y1 x2:(float)x2 y2:(float)y2 width:(float)width r:(float)r g:(float)g b:(float)b error:(NSError**)error;
- (BOOL)strokeRectDashedX:(float)x y:(float)y w:(float)w h:(float)h width:(float)width r:(float)r g:(float)g b:(float)b dashArray:(NSArray<NSNumber*>*)dashArray phase:(float)phase error:(NSError**)error;
- (BOOL)strokeLineDashedX1:(float)x1 y1:(float)y1 x2:(float)x2 y2:(float)y2 width:(float)width r:(float)r g:(float)g b:(float)b dashArray:(NSArray<NSNumber*>*)dashArray phase:(float)phase error:(NSError**)error;
绘制矩形(描边 / 填充 / 描边加粗 / 虚线)和直线(普通 / 描边 / 虚线)。
表格
- (BOOL)tableColumns:(NSArray<NSNumber*>*)widths aligns:(NSArray<NSNumber*>*)aligns rows:(NSArray<NSArray<NSString*>*>*)rows hasHeader:(BOOL)hasHeader error:(NSError**)error;
渲染一个完整表格,包含列宽、对齐方式和行数据。
流式表格
- (BOOL)streamingTableBeginHeaders:(NSArray<NSString*>*)headers widths:(NSArray<NSNumber*>*)widths aligns:(NSArray<NSNumber*>*)aligns repeatHeader:(BOOL)repeatHeader error:(NSError**)error;
- (BOOL)streamingTableBeginV2Headers:(NSArray<NSString*>*)headers widths:(NSArray<NSNumber*>*)widths aligns:(NSArray<NSNumber*>*)aligns repeatHeader:(BOOL)repeatHeader mode:(int32_t)mode sampleRows:(NSInteger)sampleRows minColWidthPt:(float)minColWidthPt maxColWidthPt:(float)maxColWidthPt maxRowspan:(NSInteger)maxRowspan error:(NSError**)error;
- (BOOL)streamingTableSetBatchSize:(NSInteger)batchSize error:(NSError**)error;
- (NSInteger)streamingTablePendingRowCount;
- (NSInteger)streamingTableBatchCount;
- (BOOL)streamingTableFlush:(NSError**)error;
- (BOOL)streamingTablePushRow:(NSArray<NSString*>*)cells error:(NSError**)error;
- (BOOL)streamingTablePushRowV2:(NSArray<NSString*>*)cells rowspans:(nullable NSArray<NSNumber*>*)rowspans error:(NSError**)error;
- (BOOL)streamingTableFinish:(NSError**)error;
开始一个流式表格(基础或 V2 自动布局)、调整批量大小、推送行数据(可带行合并 rowspan)、刷新并结束 —— 用于处理体量过大、无法一次性载入内存的表格。
提交
- (BOOL)done:(NSError**)error;
- (void)close;
将该页提交给其父构建器,或丢弃它。
POXEmbeddedFont
为嵌入而加载的 TTF/OTF 字体。所有权在 registerEmbeddedFont:font: 调用成功后转移给构建器。
+ (nullable instancetype)fromPath:(NSString*)path error:(NSError**)error;
+ (nullable instancetype)fromBytes:(NSData*)data name:(nullable NSString*)name error:(NSError**)error;
- (void)close;
从路径或字节数据加载字体(name 可为 nil,此时使用其 PostScript 名称),或释放原生句柄。
POXBarcode
一个生成的条形码 / 二维码图像。
+ (nullable instancetype)generateQrCode:(NSString*)data errorCorrection:(int32_t)errorCorrection sizePx:(int32_t)sizePx error:(NSError**)error;
+ (nullable instancetype)generateBarcode:(NSString*)data format:(int32_t)format sizePx:(int32_t)sizePx error:(NSError**)error;
生成带纠错级别的二维码,或生成给定 format 的一维/二维条形码。
- (nullable NSString*)dataError:(NSError**)error;
- (int32_t)formatError:(NSError**)error;
- (float)confidenceError:(NSError**)error;
- (nullable NSData*)imagePngWithSizePx:(int32_t)sizePx error:(NSError**)error;
- (nullable NSString*)svgWithSizePx:(int32_t)sizePx error:(NSError**)error;
- (void)close;
读取负载数据、格式代码和解码置信度;编码为 PNG 字节数据或 SVG 字符串;或释放原生句柄。
POXOcrEngine
由检测/识别/词典模型文件支撑的 OCR 引擎。
+ (nullable instancetype)createWithDetModelPath:(NSString*)detModelPath recModelPath:(NSString*)recModelPath dictPath:(NSString*)dictPath error:(NSError**)error;
- (nullable void*)POX_engineHandle;
- (void)close;
根据模型与词典路径创建引擎、暴露原始引擎句柄供 ocrExtractText:engine:error: 使用,或释放原生句柄。
POXElementList
一页的布局元素列表。
- (int32_t)count;
- (nullable NSString*)typeAtIndex:(int32_t)index error:(NSError**)error;
- (nullable NSString*)textAtIndex:(int32_t)index error:(NSError**)error;
- (POXBbox)rectAtIndex:(int32_t)index error:(NSError**)error;
- (nullable NSString*)toJsonWithError:(NSError**)error;
- (void)close;
统计元素数量;读取每个元素的类型字符串、文本和边界框;将整个列表序列化为 JSON;或释放原生句柄。
POXRenderer
一个独立于文档的渲染器句柄。
+ (nullable instancetype)createWithDpi:(int32_t)dpi format:(int32_t)format quality:(int32_t)quality antiAlias:(BOOL)antiAlias error:(NSError**)error;
- (void)close;
创建一个已配置的渲染器(DPI、格式、质量、抗锯齿),或释放原生句柄。
数字签名与 PKI
POXCertificate
一个已加载的签名 / 验证证书。
+ (nullable instancetype)loadFromBytes:(NSData*)data password:(NSString*)password error:(NSError**)error;
+ (nullable instancetype)loadFromPemCert:(NSString*)certPem keyPem:(NSString*)keyPem error:(NSError**)error;
从 PKCS#12 字节数据 + 密码,或从 PEM 证书 + 私钥加载凭据。
- (nullable NSString*)subjectError:(NSError**)error;
- (nullable NSString*)issuerError:(NSError**)error;
- (nullable NSString*)serialError:(NSError**)error;
- (BOOL)validityNotBefore:(int64_t*)notBefore notAfter:(int64_t*)notAfter error:(NSError**)error;
- (int32_t)isValidError:(NSError**)error;
- (void)close;
读取主体 / 颁发者 / 序列号、有效期窗口(Unix 纪元秒)、当前有效性(1/0/-1),或释放原生句柄。
POXSignatureInfo
从文档中读取到的签名信息。
- (nullable NSString*)signerNameError:(NSError**)error;
- (nullable NSString*)signingReasonError:(NSError**)error;
- (nullable NSString*)signingLocationError:(NSError**)error;
- (int64_t)signingTimeError:(NSError**)error;
- (nullable POXCertificate*)certificateError:(NSError**)error;
- (int32_t)padesLevelError:(NSError**)error;
- (BOOL)hasTimestampError:(NSError**)error;
- (nullable POXTimestamp*)timestampError:(NSError**)error;
- (BOOL)addTimestamp:(POXTimestamp*)timestamp error:(NSError**)error;
- (int32_t)verifyError:(NSError**)error;
- (int32_t)verifyDetached:(NSData*)pdf error:(NSError**)error;
- (void)close;
读取签名者/原因/地点/时间、签名者证书、PAdES 基线级别和时间戳;附加一个时间戳;进行加密学验证(verifyError:)或针对完整 PDF 字节数据进行端到端验证(verifyDetached:)。
POXTimestamp
一个已解析的 RFC 3161 时间戳令牌。
+ (nullable instancetype)parse:(NSData*)data error:(NSError**)error;
- (nullable NSData*)tokenError:(NSError**)error;
- (nullable NSData*)messageImprintError:(NSError**)error;
- (int64_t)timeError:(NSError**)error;
- (nullable NSString*)serialError:(NSError**)error;
- (nullable NSString*)tsaNameError:(NSError**)error;
- (nullable NSString*)policyOidError:(NSError**)error;
- (int32_t)hashAlgorithmError:(NSError**)error;
- (BOOL)verifyError:(NSError**)error;
- (void)close;
解析一个 DER 令牌;读取原始令牌字节数据、消息摘要(message imprint)、时间、序列号、TSA 名称、策略 OID 和哈希算法;执行验证;或释放原生句柄。
POXTsaClient
一个 TSA(RFC 3161)客户端。
+ (nullable instancetype)createWithUrl:(NSString*)url username:(nullable NSString*)username password:(nullable NSString*)password timeout:(int32_t)timeout hashAlgo:(int32_t)hashAlgo useNonce:(BOOL)useNonce certReq:(BOOL)certReq error:(NSError**)error;
- (nullable POXTimestamp*)requestTimestamp:(NSData*)data error:(NSError**)error;
- (nullable POXTimestamp*)requestTimestampHash:(NSData*)hash hashAlgo:(int32_t)hashAlgo error:(NSError**)error;
- (void)close;
创建一个客户端、针对数据或预先计算的哈希请求时间戳,或释放原生句柄。
POXDss
从文档中读取的文档安全存储(Document Security Store)。
- (int32_t)certCount;
- (int32_t)crlCount;
- (int32_t)ocspCount;
- (int32_t)vriCount;
- (nullable NSData*)certAtIndex:(int32_t)index error:(NSError**)error;
- (nullable NSData*)crlAtIndex:(int32_t)index error:(NSError**)error;
- (nullable NSData*)ocspAtIndex:(int32_t)index error:(NSError**)error;
- (void)close;
统计并读取 DSS 中的 DER 证书、CRL 和 OCSP 响应(以及 VRI 数量)。
POXSigning
顶层签名入口及库日志配置(类方法)。
+ (nullable NSData*)signBytes:(NSData*)pdf certificate:(POXCertificate*)certificate reason:(nullable NSString*)reason location:(nullable NSString*)location error:(NSError**)error;
使用基本(非 PAdES)签名对原始 PDF 字节数据进行签名。
+ (nullable NSData*)signBytesPades:(NSData*)pdf certificate:(POXCertificate*)certificate level:(int32_t)level tsaUrl:(nullable NSString*)tsaUrl reason:(nullable NSString*)reason location:(nullable NSString*)location certs:(NSArray<NSData*>*)certs crls:(NSArray<NSData*>*)crls ocsps:(NSArray<NSData*>*)ocsps error:(NSError**)error;
以指定的 PAdES 基线级别并附带吊销材料,对原始 PDF 字节数据进行签名。
+ (nullable NSData*)signBytesPadesOpts:(NSData*)pdf options:(POXPadesSignOptions*)options error:(NSError**)error;
使用 POXPadesSignOptions 配置对象对原始 PDF 字节数据进行签名。
+ (void)setLogLevel:(int32_t)level;
+ (int32_t)logLevel;
设置 / 获取全局日志级别(0=Off … 5=Trace)。
POXPadesSignOptions
PAdES 签名选项(结构体指针变体)。所有字段均为属性:
| 属性 | 类型 | 说明 |
|---|---|---|
certificate |
POXCertificate* |
签名证书 |
level |
int32_t |
PAdES 基线(0=B-B,1=B-T,2=B-LT) |
tsaUrl |
NSString* |
TSA URL(可为空) |
reason |
NSString* |
签名原因(可为空) |
location |
NSString* |
签名地点(可为空) |
certs / crls / ocsps |
NSArray<NSData*>* |
DER 编码的吊销材料(用于 B-LT) |
合规性结果类型
POXPdfAResults
- (BOOL)isCompliantError:(NSError**)error;
- (int32_t)errorCount;
- (int32_t)warningCount;
- (NSArray<NSString*>*)errors;
- (void)close;
PDF/A 校验结果:合规标志、错误/警告计数、错误消息。
POXUaResults
- (BOOL)isAccessibleError:(NSError**)error;
- (int32_t)errorCount;
- (int32_t)warningCount;
- (NSArray<NSString*>*)errors;
- (NSArray<NSString*>*)warnings;
- (BOOL)stats:(POXUaStats*)stats error:(NSError**)error;
- (void)close;
PDF/UA 无障碍校验结果:无障碍标志、错误/警告计数与消息,以及一个元素计数的 POXUaStats 结构体。
POXPdfXResults
- (BOOL)isCompliantError:(NSError**)error;
- (int32_t)errorCount;
- (NSArray<NSString*>*)errors;
- (void)close;
PDF/X 校验结果:合规标志、错误计数、错误消息。
顶层工具
POXTools
+ (nullable NSData*)merge:(NSArray<NSString*>*)paths error:(NSError**)error;
+ (nullable NSData*)addTimestamp:(NSData*)pdfData sigIndex:(int32_t)sigIndex tsaUrl:(NSString*)tsaUrl error:(NSError**)error;
将给定路径下的多个 PDF 合并为一个内存 PDF;为某个签名追加一个 RFC 3161 文档时间戳。
POXCrypto
+ (nullable NSString*)activeProviderWithError:(NSError**)error;
+ (nullable NSString*)cbomWithError:(NSError**)error;
+ (nullable NSString*)inventoryWithError:(NSError**)error;
+ (nullable NSString*)policyWithError:(NSError**)error;
+ (int32_t)fipsAvailable;
+ (int32_t)useFips;
+ (int32_t)setPolicy:(NSString*)spec;
加密服务提供者的内省(当前提供者、CycloneDX CBOM、清单、策略)以及 FIPS 策略控制。
POXModels
+ (nullable NSString*)manifestWithError:(NSError**)error;
+ (int32_t)prefetchAvailable;
+ (nullable NSString*)prefetchModels:(NSString*)languagesCsv error:(NSError**)error;
读取内置模型清单、检查预取是否可用,并为给定语言代码预取 ML 模型。
POXConfig
+ (int64_t)setMaxOpsPerStream:(int64_t)limit;
+ (int32_t)setPreserveUnmappedGlyphs:(int32_t)preserve;
进程级全局开关:限制每个内容流解码的操作符数量上限,并切换是否在提取文本中保留未映射的字形。两者均返回先前的值。
值类型
以下只读 NSObject 类型由上述提取方法返回。
POXChar
| 属性 | 类型 | 说明 |
|---|---|---|
character |
uint32_t |
Unicode 码位 |
bbox |
POXBbox |
边界框 |
fontName |
NSString* |
PostScript 字体名称 |
fontSize |
float |
字号(点) |
POXWord
| 属性 | 类型 | 说明 |
|---|---|---|
text |
NSString* |
单词文本 |
bbox |
POXBbox |
边界框 |
fontName |
NSString* |
PostScript 字体名称 |
fontSize |
float |
字号(点) |
bold |
BOOL |
该单词是否加粗 |
POXTextLine
| 属性 | 类型 | 说明 |
|---|---|---|
text |
NSString* |
行文本 |
bbox |
POXBbox |
边界框 |
wordCount |
NSInteger |
该行的单词数量 |
- (nullable NSString*)cellTextAtRow:(NSInteger)row col:(NSInteger)col; // POXTable
POXTable
| 属性 / 方法 | 类型 | 说明 |
|---|---|---|
rowCount |
NSInteger |
行数 |
colCount |
NSInteger |
列数 |
hasHeader |
BOOL |
该表格是否有表头行 |
cellTextAtRow:col: |
NSString* |
(row, col) 处的单元格文本(超出范围时为 nil) |
POXFont
| 属性 | 类型 | 说明 |
|---|---|---|
name |
NSString* |
字体名称 |
type |
NSString* |
字体类型(如 TrueType、Type1) |
encoding |
NSString* |
字体编码 |
embedded |
BOOL |
该字体是否已嵌入 |
subset |
BOOL |
该字体是否为子集 |
size |
float |
标称字号(点),未知时为 0 |
POXImage
| 属性 | 类型 | 说明 |
|---|---|---|
width / height |
NSInteger |
像素尺寸 |
bitsPerComponent |
NSInteger |
每个颜色分量的位数 |
format |
NSString* |
图像格式 |
colorspace |
NSString* |
色彩空间 |
data |
NSData* |
编码后的图像字节数据 |
POXAnnotation
| 属性 | 类型 | 说明 |
|---|---|---|
type / subtype |
NSString* |
注释类型与子类型 |
content / author |
NSString* |
内容与作者 |
rect |
POXBbox |
注释矩形 |
borderWidth |
float |
边框宽度 |
color |
uint32_t |
颜色,打包为 0xAARRGGBB(不存在时为 0) |
creationDate / modificationDate |
int64_t |
Unix 纪元秒(不存在时为 0) |
hidden / markedDeleted / printable / readOnly |
BOOL |
标志位 |
linkUri |
NSString* |
Link 注释的目标 URI(可为空) |
iconName |
NSString* |
Text/note 注释的图标名称(可为空) |
quadPoints |
NSArray<NSArray<NSNumber*>*>* |
Highlight 注释的四边形点 |
POXFormField
| 属性 | 类型 | 说明 |
|---|---|---|
name |
NSString* |
字段名称 |
value |
NSString* |
当前值 |
type |
NSString* |
字段类型 |
readonly |
BOOL |
该字段是否只读 |
required |
BOOL |
该字段是否必填 |
POXPath
| 属性 | 类型 | 说明 |
|---|---|---|
bbox |
POXBbox |
边界框 |
strokeWidth |
float |
描边宽度 |
hasStroke / hasFill |
BOOL |
该路径是否有描边 / 填充 |
operationCount |
NSInteger |
路径操作数量 |
POXSearchResult
| 属性 | 类型 | 说明 |
|---|---|---|
text |
NSString* |
匹配到的文本 |
page |
NSInteger |
从零开始的页索引 |
bbox |
POXBbox |
匹配项的边界框 |
POXRenderedImage
| 属性 / 方法 | 类型 | 说明 |
|---|---|---|
width / height |
NSInteger |
像素尺寸 |
data |
NSData* |
编码后的图像字节数据(如 PNG) |
saveToPath:error: |
BOOL |
将渲染后的图像写入文件 |
close |
void |
释放原生句柄 |
错误处理
失败的操作会返回 nil / NO / 负的状态值,并向 NSError** 输出参数填充一个属于 POXErrorDomain 域的错误:
NSError* error = nil;
POXDocument* doc = [POXDocument openPath:@"input.pdf" error:&error];
if (!doc) {
NSLog(@"Open failed: %@", error.localizedDescription);
return;
}
NSString* text = [doc extractText:0 error:&error];
if (!text) {
NSLog(@"Extraction failed: %@", error.localizedDescription);
}
[doc close];
完整示例
#import <PdfOxide/POXPdfOxide.h>
NSError* error = nil;
// --- Extraction ---
POXDocument* doc = [POXDocument openPath:@"input.pdf" error:&error];
NSInteger pages = [doc pageCountError:&error];
for (NSInteger i = 0; i < pages; i++) {
NSString* md = [doc toMarkdown:i error:&error];
NSLog(@"Page %ld: %lu chars", (long)i, (unsigned long)md.length);
}
// Render page 0 to PNG
POXRenderedImage* img = [doc renderPage:0 format:0 error:&error];
[img saveToPath:@"page0.png" error:&error];
[doc close];
// --- Creation ---
POXDocumentBuilder* builder = [POXDocumentBuilder createWithError:&error];
[builder setTitle:@"Report" error:&error];
POXPageBuilder* page = [builder letterPageWithError:&error];
[page heading:1 text:@"Report" error:&error];
[page paragraph:@"Generated by PDF Oxide." error:&error];
[page done:&error];
[builder saveToPath:@"report.pdf" error:&error];
// --- Editing ---
POXDocumentEditor* editor = [POXDocumentEditor openEditor:@"document.pdf" error:&error];
[editor rotateAllPages:90 error:&error];
[editor setFormField:@"name" value:@"John Doe" error:&error];
[editor saveToPath:@"output.pdf" error:&error];
[editor close];
Other Language Bindings
PDF Oxide 为所有主流生态系统提供原生绑定:Rust, Python, Node.js, WASM, C#, Golang, Java, PHP, Ruby, C++, Swift, Kotlin, Dart, R, Julia, Zig, Scala, Clojure, Elixir。
后续步骤
- 类型与枚举 — 所有共享类型与枚举
- Page API 参考 — 各绑定间一致的逐页迭代方式
- Objective-C 快速上手 — 教程