在iphone应用程序中从UIScrollView创buildPDF

我正在创buildpdf从UIView到PDF它工作正常,但我有我想转换为PDF格式的内容的scrollView ,但它只显示可见部分在PDF不是整个scrollView内容。 这是我的代码

 -(void)createPDFfromUIView:(UIView*)aView saveToDocumentsWithFileName:(NSString*)aFilename { NSMutableData *pdfData = [NSMutableData data]; // Get Scrollview size CGRect scrollSize = CGRectMake(1018,76,scrollView.contentSize.width,scrollView.contentSize.height); // Points the pdf converter to the mutable data object and to the UIView to be converted UIGraphicsBeginPDFContextToData(pdfData, scrollSize, 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]; NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename]; // instructs the mutable data object to write its context to a file on disk [pdfData writeToFile:documentDirectoryFilename atomically:YES]; NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename); } 

这给你的UIScrollView的可见部分

 CGRect visibleRect; visibleRect.origin = scrollView.contentOffset; visibleRect.size = scrollView.bounds.size; float theScale = 1.0 / scale; visibleRect.origin.x *= theScale; visibleRect.origin.y *= theScale; visibleRect.size.width *= theScale; visibleRect.size.height *= theScale; 

所以你可以在UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);
通过参数的一些小的改变。

 (void)createPDFfromUIView:(UIScrollView*)aView saveToDocumentsWithFileName:(NSString*)aFilename { // Creates a mutable data object for updating with binary data, like a byte array NSMutableData *pdfData = [NSMutableData data]; // Get Scrollview size CGRect scrollSize = CGRectMake(aView.origin.x,aView.origin.y,aView.contentSize.width,aView.contentSize.height); // Points the pdf converter to the mutable data object and to the UIView to be converted UIGraphicsBeginPDFContextToData(pdfData, scrollSize, 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]; NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename]; // instructs the mutable data object to write its context to a file on disk [pdfData writeToFile:documentDirectoryFilename atomically:YES]; NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename); } 

这个代码我用来从uiscrollview的PDF,它确实有帮助,但它不会像我们在pdf上绘制 – 请看看 – 从UIScrollView Pdf

 - (void) createPDF { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *directroyPath = nil; directroyPath = [documentsDirectory stringByAppendingPathComponent:@"temp"]; NSString *filePath = [directroyPath stringByAppendingPathComponent:@"test.pdf"]; // check for the "PDF" directory NSError *error; if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { } else { [[NSFileManager defaultManager] createDirectoryAtPath:directroyPath withIntermediateDirectories:NO attributes:nil error:&error]; } CGContextRef pdfContext = [self createPDFContext:_scrollView2.bounds path:(CFStringRef)filePath]; NSLog(@"PDF Context created"); /* Here limit of i is no of pages in your uiscrollview or you can use hit and trial here because there is a length of page is going to be equal to the visible size of uiscrollView in your application */ for (int i = 0 ; i< 2 ; i++) { // page 1 CGContextBeginPage (pdfContext,nil); //turn PDF upsidedown CGAffineTransform transform = CGAffineTransformIdentity; //here 365 is equal to the height of myScrollView.frame.size.height transform = CGAffineTransformMakeTranslation(0, (i+1) * 365); transform = CGAffineTransformScale(transform, 1.0, -1.0); CGContextConcatCTM(pdfContext, transform); //Draw view into PDF [_scrollView2.layer renderInContext:pdfContext]; CGContextEndPage (pdfContext); [_scrollView2 setContentOffset:CGPointMake(0, (i+1) * 365) animated:NO]; } CGContextRelease (pdfContext); } - (CGContextRef) createPDFContext:(CGRect)inMediaBox path:(CFStringRef) path { CGContextRef myOutContext = NULL; CFURLRef url; url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, false); if (url != NULL) { myOutContext = CGPDFContextCreateWithURL (url, &inMediaBox, NULL); CFRelease(url); } return myOutContext; }