从UIScrollView Objective C创建PDF

时间:2014-02-04 19:55:11

标签: ios objective-c uiscrollview

此问题已在(Creating PDF from UIScrollView in iphone app)之前发布,而我使用的代码来自here

这是代码

-(void)createPDFfromUIView:(UIView*)aView saveToDocumentsWithFileName:(NSString*)aFilename
{
    // Creates a mutable data object for updating with binary data, like a byte array
    NSMutableData *pdfData = [NSMutableData data];

    // Points the pdf converter to the mutable data object and to the UIView to be converted
    UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);
    UIGraphicsBeginPDFPage();
    CGContextRef pdfContext = UIGraphicsGetCurrentContext();


    // draws rect to the view and thus this is captured by UIGraphicsBeginPDFContextToData

    [aView.layer renderInContext:pdfContext];

    // remove PDF rendering context
    UIGraphicsEndPDFContext();

    // Retrieves the document directories from the iOS device
    NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);

    NSString* documentDirectory = [documentDirectories objectAtIndex:0];
    documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename];

    // instructs the mutable data object to write its context to a file on disk
    [pdfData writeToFile:documentDirectoryFilename atomically:YES];
}

设置:我有一个UIScrollView,里面是一个UIView。我想保存整个UIView(950,500px),并且它位于(520,500)的空间(UIScrollView大小)中。生成的PDF只是UIScrollView(520,500)的大小

我读了answer,但他显然改变了代码,但它对我不起作用。我一直在努力解决这个问题。

我是初学者,所以请指出我应该添加到我错过的问题中的任何内容。谢谢。

PS - 这是一款iPad应用程序。

3 个答案:

答案 0 :(得分:5)

上下文应该具有scrollview内容大小的大小,而不是边界。

然后,您需要暂时将scrollview的大小调整为其内容大小,在PDF上下文中呈现它,并将scrollview的大小恢复为原始大小。

UIGraphicsBeginPDFContextToData(pdfData, (CGRect){0,0, scrollView.contentSize}, nil);

CGRect origSize = scrollView.frame;
CGRect newSize = origSize;
newSize.size = scrollView.contentSize;
[scrollView setFrame:newSize];

[scrollView.layer renderInContext:pdfContext];

[scrollView setFrame:origSize];

答案 1 :(得分:2)

查看ScrollViewToPDF示例,您就会明白需要做什么。

它使用相同的scrollview's layer renderInContext,但此处PDF是根据您的要求创建的,例如一页PDF或多页PDF

注意:它捕获scrollView

的所有可见部分和不可见部分

答案 2 :(得分:1)

如果有人想知道,我找到了解决这个问题的方法。

由于我的UIView是一个UIScrollView,我使用另一个类作为UIView,当我调用该方法并选择参数aView时,我只是放入self

所以在我的UIView类中,当我想要生成PDF时我输入

[self createPDFfromUIView:self saveToDocumentsWithFileName:UIViewPDF];