我开发了一个包含所有建议和代码片段的pdf查看器。谢谢:)现在我想让它成为一个PDF编辑器。我想为iphone / ipad创建一个类似于PDFKit的应用程序(仅适用于桌面)。我希望用户能够添加注释并突出显示文本部分。
我该如何解决这个问题?到目前为止,我已经解析了pdf内容(我以前的帖子是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
答案 0 :(得分:7)
因此,在标题中,您说要为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);
}
答案 1 :(得分:3)
这个真的棘手。
Quartz在这里并没有真正帮到你。
您可能想尝试libHaru,它具有非常悲观的许可证并且与appstore兼容。这不是免费乘车--HARU只能生成pdfs。