打开 PDF 文件,并读取其中的内容

// 读取文件路径

NSString *filePath = @"your-pdf-file-path";

// 创建 CFURLRef 对象

CFURLRef urlRef = (__bridge CFURLRef)[NSURL fileURLWithPath:filePath];

// 打开 PDF 文档

CGPDFDocumentRef documentRef = CGPDFDocumentCreateWithURL(urlRef);

// 获取 PDF 文档的总页数

NSInteger pageCount = CGPDFDocumentGetNumberOfPages(documentRef);

// 遍历 PDF 文档中的所有页面,并读取其中的内容

for (NSInteger pageIndex = 1; pageIndex <= pageCount; pageIndex++) {

    // 获取当前页面对象

    CGPDFPageRef pageRef = CGPDFDocumentGetPage(documentRef, pageIndex);


    // 获取当前页面的内容

    CGPDFContentStreamRef contentStreamRef = CGPDFContentStreamCreateWithPage(pageRef);

    CGPDFScannerRef scannerRef = CGPDFScannerCreate(contentStreamRef, NULL, NULL);


    // 遍历页面中的所有内容对象,并读取其中的内容

    while (CGPDFScannerScan(scannerRef)) {

        CGPDFObjectRef objectRef;

        if (CGPDFScannerPopObject(scannerRef, &objectRef)) {

            if (CGPDFObjectGetType(objectRef) == kCGPDFObjectTypeString) {

                CGPDFStringRef stringRef;

                if (CGPDFObjectGetValue(objectRef, kCGPDFObjectTypeString, &stringRef)) {

                    NSString *string = (__bridge_transfer NSString *)CGPDFStringCopyTextString(stringRef);

                    NSLog(@"%@", string);

                }

            }

        }

    }


    // 释放内存

    CGPDFScannerRelease(scannerRef);

    CGPDFContentStreamRelease(contentStreamRef);

}

// 释放内存

CGPDFDocumentRelease(documentRef);



在这个示例代码中,我们使用CGPDFDocumentCreateWithURL方法打开 PDF 文件,并使用CGPDFDocumentGetNumberOfPages方法获取 PDF 文档的总页数。然后,我们遍历 PDF 文档中的所有页面,并使用CGPDFPageRef类型的对象来读取页面内容。在读取页面内容时,我们使用CGPDFScannerCreate和CGPDFScannerScan方法来遍历页面中的所有内容对象,并使用CGPDFStringCopyTextString方法读取字符串类型的内容。需要注意的是,读取完 PDF 文件后,我们需要使用CGPDFDocumentRelease方法释放内存。

需要注意的是,上面的示例代码仅读取了 PDF 文件中的字符串类型的内容,如果您想读取其他类型的内容,可以参考CGPDFObjectType枚举中的其他常量,并根据需要进行修改。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。