Добавить аннотацию в 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-файлы.