Аннотировать PDF в iPhone SDK - PullRequest
       13

Аннотировать PDF в iPhone SDK

13 голосов
/ 22 февраля 2010

Мне удалось реализовать очень простую программу просмотра PDF в моем приложении, но мне было интересно, можно ли добавить аннотации в PDF. Я просмотрел документы SDK, но ничего не нашел. У меня действительно 2 вопроса:

  1. Возможно ли это сделать?
  2. Каков наилучший подход?
  3. Есть ли рамки или библиотека, которые я могу включить, чтобы помочь с этим?

Спасибо.

Ответы [ 3 ]

18 голосов
/ 16 июня 2011

Вы можете сделать аннотацию, прочитав страницу PDF, нарисовав ее в новом графическом контексте PDF, а затем добавив дополнительный контент в этот графический контекст. Вот некоторый код, который добавляет слова «Пример аннотации» в позиции (100.0,100.0) к существующему PDF. Метод getPDFFileName возвращает путь к исходному PD. getTempPDFFileName возвращает путь к новому PDF, который является оригиналом плюс аннотация.

Чтобы варьировать аннотации, просто добавьте больше кода для рисования вместо метода drawInRect: withFont:. Подробнее о том, как это сделать, см. В Руководстве по рисованию и печати для iOS.

- (void) exampleAnnotation;
{
    NSURL* url = [NSURL fileURLWithPath:[self getPDFFileName]];

    CGPDFDocumentRef document = CGPDFDocumentCreateWithURL ((CFURLRef) url);// 2
    size_t count = CGPDFDocumentGetNumberOfPages (document);// 3

    if (count == 0)
    {
        NSLog(@"PDF needs at least one page");
        return;
    }

    CGRect paperSize = CGRectMake(0.0,0.0,595.28,841.89);

    UIGraphicsBeginPDFContextToFile([self getTempPDFFileName], paperSize, nil);

    UIGraphicsBeginPDFPageWithInfo(paperSize, nil);

    CGContextRef currentContext = UIGraphicsGetCurrentContext();

    // flip context so page is right way up
    CGContextTranslateCTM(currentContext, 0, paperSize.size.height);
    CGContextScaleCTM(currentContext, 1.0, -1.0); 

    CGPDFPageRef page = CGPDFDocumentGetPage (document, 1); // grab page 1 of the PDF 

    CGContextDrawPDFPage (currentContext, page); // draw page 1 into graphics context

     // flip context so annotations are right way up
    CGContextScaleCTM(currentContext, 1.0, -1.0);
    CGContextTranslateCTM(currentContext, 0, -paperSize.size.height);

    [@"Example annotation" drawInRect:CGRectMake(100.0, 100.0, 200.0, 40.0) withFont:[UIFont systemFontOfSize:18.0]];

    UIGraphicsEndPDFContext();

    CGPDFDocumentRelease (document);
}
3 голосов
/ 26 февраля 2015

Я работаю над материалом и создал проект GitHub. Пожалуйста, проверьте это здесь .

1 голос
/ 22 февраля 2010

Я не думаю, что PDFAnnotation или PDFKit были перенесены на iPhone с рабочего стола .... вероятно, отличное оправдание для подачи радара . Тем не менее, Хару может тем временем помочь вам.

...