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

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

Как я могу пойти с этим? Пока что я проанализировал содержимое PDF (мой предыдущий пост - проблема с анализом PDF). Есть ли открытый редактор 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 ответа

Таким образом, в заголовке вы говорите, что хотите добавить аннотацию в 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);
}

Это будет очень сложно.

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

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

http://libharu.org/

Другие вопросы по тегам