我知道之前已经问过这个问题了。但是,没有人回答得很好。我想知道如何在iPhone上解析PDF的“目录”。文档告诉我使用CGPDFDocumentGetCatalog而不是如何使用它。他们所说的只是它返回一本字典。另外,我找不到任何示例代码。有什么建议吗?
答案 0 :(得分:0)
在SO上看起来最接近的是Create a table of contents from a pdf file
答案 1 :(得分:0)
它基本上只是在CGPDFPage中解析名为“Outline”的CGPDFDictionary。
// get outline & loop through dictionary...
CGPDFDictionaryRef outlineRef;
if(CGPDFDictionaryGetDictionary(pdfDocDictionary, "Outlines", &outlineRef)) {
}
然后你从第一个元素开始并解析你的方式。
CGPDFDictionaryGetDictionary(outlineRef, "First", &firstEntry)
您想获得标题和目的地。
NSString *outlineTitle = PSPDFStringFromPDFDict(outlineElementRef, @"Title");
CGPDFDictionaryGetObject(outlineElementRef, "Dest", &destinationRef)
棘手的事情始于获取正确的目的地,因为有(horray,PDF!)几种方式来存储它,以及几种未在PDF参考中定义但仍然在野外的方式。还有几个刚刚破解的变种,你必须处理它。
例如,您可以使用
获取大纲词典的CountCGPDFInteger elements;
if(CGPDFDictionaryGetInteger(outlineRef, "Count", &elements)) {
PSPDFLog(@"parsing outline: %ld elements. (Count will be ignored anyway)", (long int)elements);
}else {
PSPDFLogError(@"Error while parsing outline. No outlineRef?");
}
但请注意,由于PDF创建工具损坏,Count有时无效。请将PDF视为HTML。即使它被破坏,解析器也会尽力显示尽可能多的数据。所以我的建议是忽略Count并解析字典。 (几周前我遇到了一个计数= -10的文件。去图)
我无法发布完整的代码,因为它来自我的商业PDF库PSPDFKit,我需要以它为生;)但这应该让你开始。