2

我已经在其他几个论坛上问过这个问题并且得到了零回应,所以我希望这里的人可以帮助我指出正确的方向。我的工作有一个非常简单的单屏应用程序。它基本上只是一个 1 页纸质报告的再创作,该报告有一个公司徽标、一些标签、几个文本框和一个用于报告的滚动文本框。

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

我已经通读了用于创建 PDF 的新 iPad 3.2 指南(显然它应该比以前容易得多),但我无法让它工作,我现在已经花了无数个小时在上面。我希望有人能给我答案。

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

最后,附带说明一下,有没有人知道通过触摸捕获数字签名的好方法。例如,在我转换为 PDF 或截屏之前,我希望我的用户能够通过触摸文档底部的方式签署他们的名字。

在此先感谢您的帮助。-射线

4

1 回答 1

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    
}
于 2011-03-20T06:27:45.253 回答