创建1页PDF的iPad屏幕视图 - 如何?

时间:2010-04-12 16:09:31

标签: ipad pdf-generation iphone-sdk-3.2

我在其他几个论坛上问过这个问题并没有回复,所以我希望有人能指点我正确的方向。我的工作有一个非常简单的一个屏幕应用程序。它基本上只是一个1页纸质报告的重新创建,它有一个公司徽标,一些标签,一些文本框和报告的滚动文本框。

我需要能够填写报告,然后单击按钮将其保存为图形形式,以便稍后传真,打印或通过电子邮件发送。目前,我只是以编程方式拍摄屏幕并将其保存到照片库(屏幕截图默认)。然后我可以通过照片发送电子邮件。这项工作正常,但充其量只是hacky。

我已经阅读了新的iPad 3.2指南来创建PDF(显然它应该比以前容易得多)但是我无法让它工作,我现在花了无数个小时。我希望有人能帮我解决。

或者,如果有人知道如何重定向存储屏幕捕获的位置(默认位于相册中),那么也许我可以使该功能正常工作。如果我可以将屏幕截图重定向到存储在我的应用程序文档文件夹中,那么我可以使用MFMailCompose将其附加到电子邮件中。

最后,在旁注中,有没有人知道通过触摸捕获数字签名的好方法。例如,在转换为PDF或进行屏幕截图之前,我希望让我的用户能够通过文档底部的触摸来签名。

提前感谢您的帮助。 -Ray

1 个答案:

答案 0 :(得分:0)

我正在使用以下代码段。它适用于 单页PDF生成 。 它使用您拥有内容的任何视图,并将其捕获为PDF文件并存储到文档目录中。

关于某个功能

{
 ....
    // here container view is my content to be converted to PDF file
    // filepath is the path to where it should be write in our documents directory
    CGContextRef pdfContext = [self createPDFContext:containerView.bounds path:(CFStringRef)filePath];  
    NSLog(@"PDF Context created");
    CGContextBeginPage (pdfContext,nil); // 6

    //turn PDF upsidedown   
    CGAffineTransform transform = CGAffineTransformIdentity;    
    transform = CGAffineTransformMakeTranslation(0, containerView.bounds.size.height);  
    transform = CGAffineTransformScale(transform, 1.0, -1.0);   
    CGContextConcatCTM(pdfContext, transform);  

    //Draw view into PDF
    [containerView.layer renderInContext:pdfContext];   
    CGContextEndPage (pdfContext);// 8  
    CGContextRelease (pdfContext);

 ....
}

- (CGContextRef) createPDFContext:(CGRect)inMediaBox path:(CFStringRef) path    
{   
    CGContextRef myOutContext = NULL;   
    CFURLRef url;   
    url = CFURLCreateWithFileSystemPath (NULL, // 1                                      
                                         path,                                       
                                         kCFURLPOSIXPathStyle,                                       
                                         false);

    if (url != NULL) {      
        myOutContext = CGPDFContextCreateWithURL (url,// 2                                                
                                                  &inMediaBox,                                                
                                                  NULL);        
        CFRelease(url);// 3     
    }   
    return myOutContext;// 4    
}