macOS/iOS PDFKit:创建文档的大纲根
macOS/iOS PDFKit: create document's outline root
以下示例代码允许向现有 PDFDocument pdfDoc
标签 添加大纲(或 Acrobat 术语中的 "bookmark") ]Page n 指向页码 n where n是传递的参数pageNum
.
void insertOutline( PDFDocument *pdfDoc, NSUInteger pageNum )
{
PDFOutline *otl,
*root;
NSString *label = [NSString stringWithFormat:@"Page %lu", (unsigned long)pageNum + 1];
PDFDestination *destination;
PDFAction *action;
NSPoint point = {FLT_MAX, FLT_MAX};
PDFPage *page;
// Build the outline
page = [pdfDoc pageAtIndex: pageNum];
destination = [[PDFDestination alloc] initWithPage:page atPoint:point];
action = [[PDFActionGoTo alloc] initWithDestination: destination];
root = [pdfDoc outlineRoot];
otl = [[PDFOutline alloc] init];
[otl setLabel: label];
[otl setAction: action];
// Insert the outline
[root insertChild: otl atIndex: pageNum];
// Release resources
[otl release];
[action release];
[destination release];
}
创建的大纲作为子项添加到文档大纲层次结构树顶部的根大纲。
尝试向尚未包含任何大纲的 PDF 添加大纲时出现问题。
在那种情况下 root = [pdfDoc outlineRoot];
将导致 root
设置为 NULL
并且随后的代码显然会失败。
如果我用 Acrobat Pro 打开源文档并手动添加一个 outline/bookmark 那么代码就可以工作了。
问题是:如何在 PDFDocument 中添加缺少的根大纲?
通过查看Apple的参考here PDFDocument
class提供了设置大纲根的方法
所以修复是:
root = [pdfDoc outlineRoot];
if( ! root )
{
root = [[PDFOutline alloc] init];
[pdfDoc setOutlineRoot: root];
}
以下示例代码允许向现有 PDFDocument pdfDoc
标签 添加大纲(或 Acrobat 术语中的 "bookmark") ]Page n 指向页码 n where n是传递的参数pageNum
.
void insertOutline( PDFDocument *pdfDoc, NSUInteger pageNum )
{
PDFOutline *otl,
*root;
NSString *label = [NSString stringWithFormat:@"Page %lu", (unsigned long)pageNum + 1];
PDFDestination *destination;
PDFAction *action;
NSPoint point = {FLT_MAX, FLT_MAX};
PDFPage *page;
// Build the outline
page = [pdfDoc pageAtIndex: pageNum];
destination = [[PDFDestination alloc] initWithPage:page atPoint:point];
action = [[PDFActionGoTo alloc] initWithDestination: destination];
root = [pdfDoc outlineRoot];
otl = [[PDFOutline alloc] init];
[otl setLabel: label];
[otl setAction: action];
// Insert the outline
[root insertChild: otl atIndex: pageNum];
// Release resources
[otl release];
[action release];
[destination release];
}
创建的大纲作为子项添加到文档大纲层次结构树顶部的根大纲。
尝试向尚未包含任何大纲的 PDF 添加大纲时出现问题。
在那种情况下 root = [pdfDoc outlineRoot];
将导致 root
设置为 NULL
并且随后的代码显然会失败。
如果我用 Acrobat Pro 打开源文档并手动添加一个 outline/bookmark 那么代码就可以工作了。
问题是:如何在 PDFDocument 中添加缺少的根大纲?
通过查看Apple的参考here PDFDocument
class提供了设置大纲根的方法
所以修复是:
root = [pdfDoc outlineRoot];
if( ! root )
{
root = [[PDFOutline alloc] init];
[pdfDoc setOutlineRoot: root];
}