在iPhone SDK中注释PDF

在iPhone SDK中注释PDF,iphone,pdf,annotate,Iphone,Pdf,Annotate,我已经设法在我的应用程序中实现了一个非常基本的PDF查看器,但是我想知道是否可以在PDF中添加注释。我已经查看了SDK文档,但没有找到任何内容。我有两个问题: 有可能这样做吗? 最好的方法是什么? 是否有一个框架或库,我可以包括,以协助这一点? 谢谢。我不认为PDFAnnotation或PDFKit是从桌面移植到iPhone的。。。。也许是一个很好的借口。但是,这可能会让您同时通过。您可以通过阅读PDF页面,将其绘制到新的PDF图形上下文中,然后在该图形上下文中绘制额外的内容来进行注释。下面是一

我已经设法在我的应用程序中实现了一个非常基本的PDF查看器,但是我想知道是否可以在PDF中添加注释。我已经查看了SDK文档,但没有找到任何内容。我有两个问题:

有可能这样做吗? 最好的方法是什么? 是否有一个框架或库,我可以包括,以协助这一点?
谢谢。

我不认为PDFAnnotation或PDFKit是从桌面移植到iPhone的。。。。也许是一个很好的借口。但是,这可能会让您同时通过。

您可以通过阅读PDF页面,将其绘制到新的PDF图形上下文中,然后在该图形上下文中绘制额外的内容来进行注释。下面是一些将位置100.0100.0处的“示例注释”添加到现有PDF的代码。getPdfielName方法返回原始PD的路径。getTempPDFFileName返回新PDF的路径,即原始PDF加上注释的路径

要改变注释,只需添加更多的绘图代码来代替drawInRect:withFont:method。有关如何执行此操作的详细信息,请参阅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);
}

我在stuff工作,创建了一个GitHub项目。请查看。

这是一个巨大的帮助。一旦我对此有了更深入的了解,我将创建一个github项目与社区共享。您是否在@Jack?@Metthew创建了github项目?我尝试了您的示例,但无法打开文档。我收到一个“权限被拒绝”错误。@Juzzz:可能是因为您试图修改的pdf是密码protected@Obliquely您的代码将在pdf页面中添加文本注释,但它是否可由其他应用程序(如adobe或MAC的preview)修改?由于您只是在pdf页面上绘制注释,而没有在pdf/Annots dictionary of pdf中为该注释创建任何条目。嗨,Jack,是否创建了注释?但是,您的项目不会将注释保存到pdf中。我检查了源代码,它正在存档所有注释信息,与实际的pdf文件无关。因此,如果我将pdf文件传递给另一台机器,则pdf将在不做任何更改的情况下传输。它正在开发中。请稍后查看:@lazyprogram,请更新它的库,因为我在xcode 7上运行时遇到了动态库错误,应用程序在设备上崩溃。您好,我使用了您的项目,它工作正常。但现在我需要像一个skitch应用程序一样用手移动文本视图或绘制的图像。如何实现这一点?您能提供任何启动吗?目前,Haru只能在以下平台上运行:1。Cygwin+GCC Microsoft Windows 2。Cygwin+MinGW Microsoft Windows 3。MSYS+MinGW Microsoft Windows 3。微软VC++微软视窗4。Borland C++微软Windows 5。GCC Linux、FreeBSD、NetBSD、Solaris。。。