以下示例代码允许将轮廓(或Acrobat术语中的“书签”)添加到标签为 Page n PDFDocument pdfDoc
> 指向页码 n ,其中 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打开源文档并手动添加单个大纲/书签,则代码将起作用。
问题是::如果缺少根大纲,如何将其添加到 PDFDocument ?
答案 0 :(得分:1)
通过查看Apple的参考here PDFDocument
类,可以提供一种设置轮廓根的方法。
因此解决方法是:
root = [pdfDoc outlineRoot];
if( ! root )
{
root = [[PDFOutline alloc] init];
[pdfDoc setOutlineRoot: root];
}