macOS / iOS PDFKit: создание корня структуры документа - PullRequest
0 голосов
/ 02 октября 2018

Следующий пример кода позволяет добавить схему (или «закладку» в терминологии Acrobat) к существующему PDFDocument pdfDoc с меткой Страница n указывая на номер страницы 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 корневой контур, если он отсутствует?

1 Ответ

0 голосов
/ 02 октября 2018

Рассматривая ссылку Apple здесь PDFDocument класс предоставляет метод для установки корня контура.

Итак, исправление:

root = [pdfDoc outlineRoot];

if( ! root )
{
    root = [[PDFOutline alloc] init];
    [pdfDoc setOutlineRoot: root];
}
...