добавить аннотацию в pdf - PullRequest
       4

добавить аннотацию в pdf

8 голосов
/ 02 августа 2011

Я разработал программу просмотра PDF со всеми вашими предложениями и фрагментами кода.Спасибо :) Теперь я хочу сделать это редактором PDF.Я хочу создать приложение для iphone / ipad, похожее на PDFKit (которое предназначено только для настольных компьютеров).Я хочу, чтобы пользователь мог добавлять аннотации и выделять текстовые разделы.

Как мне поступить с этим?Пока что я проанализировал содержимое pdf (мой предыдущий пост parsing problem ).Есть ли открытый редактор PDF, который добавляет аннотации к существующим PDF?

Кроме того, это можно сделать с помощью Objective-C или есть другой языковой код (C или javascript), который это делает?

NSURL *newUrl = [NSURL fileURLWithPath:"path to pdf"];
CGPDFDocumentRef templateDocument = CGPDFDocumentCreateWithURL(newUrl); 
CFRelease(url); 

CGContextRef pdfContext = UIGraphicsGetCurrentContext();
CGPDFPageRef page = CGPDFDocumentGetPage(templateDocument, 1);
CGContextDrawPDFPage(pdfContext, page);

const char *text = "second line!";
CGContextShowTextAtPoint (pdfContext, 10, 30, text, strlen(text));
CGContextEndPage (pdfContext);

CGContextRelease (pdfContext);

pdfcontext - это тот же объект, который я создалпри создании нового PDF.В моем pdf есть строка вроде "Привет, мир".Я пытаюсь добавить еще одну строку.

Я получаю следующую ошибку:

GContextShowTextAtPoint: invalid context 0x0

Ответы [ 2 ]

7 голосов
/ 17 апреля 2012

Итак, в заголовке вы говорите, что хотите добавить аннотацию в pdf, но затем пример, который вы пытаетесь сделать работой в основной части вашего вопроса, - это просто добавление текста в pdf. Это очень разные вещи ....

Вот «Hello World», который добавляет текст в существующий PDF (аналогично вашей попытке):

Я не проверял это, но он основан на существующем коде (где я рисовал, используя CTLine вместо CGContextShowTextAtPoint), поэтому он должен быть очень близок. Проверка ошибок была удалена для ясности.

/*
 * This function copies the first page of a source pdf into the destination pdf 
 * and then adds a line of text to the destination pdf.
 *
 * This must be modified by putting the correct path into the NSURL lines
 * for sourceURL and destURL before it will work.
 *
 * This code is using ARC and has error checking removed for clarity.
 */
- (void)helloWorldPDF {
    // Open the source pdf
    NSURL               *sourceURL      = [NSURL fileURLWithPath:@"path to original pdf"];
    CGPDFDocumentRef    sourceDoc       = CGPDFDocumentCreateWithURL((__bridge CFURLRef)sourceURL);

    // Create the new destination pdf & set the font
    NSURL               *destURL        = [NSURL fileURLWithPath:@"path to new pdf"];
    CGContextRef        destPDFContext  = CGPDFContextCreateWithURL((__bridge CFURLRef)destURL, NULL, NULL);
    CGContextSelectFont(destPDFContext, "CourierNewPS-BoldMT", 12.0, kCGEncodingFontSpecific);

    // Copy the first page of the source pdf into the destination pdf
    CGPDFPageRef        pdfPage         = CGPDFDocumentGetPage(sourceDoc, 1);
    CGRect              pdfCropBoxRect  = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox);
    CGContextBeginPage  (destPDFContext, &pdfCropBoxRect);
    CGContextDrawPDFPage(destPDFContext, pdfPage);

    // Close the source file
    CGPDFDocumentRelease(sourceDoc);

    // Draw the text
    const char *text = "second line!";
    CGContextShowTextAtPoint(destPDFContext, 10.0, 30.0, text, strlen(text));

    // Close the destination file
    CGContextRelease(destPDFContext);
}
3 голосов
/ 03 августа 2011

Этот будет действительно хитрым.

Кварц здесь вам не поможет.

Вы можете попробовать libHaru, которая имеет довольно пессимистичную лицензию и совместима с appstore.Это не бесплатная поездка - HARU может генерировать только PDF-файлы.

http://libharu.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...