Create PDF from UIScrollView in iphone application

I create pdf from UIView to pdf, it works fine, but I have scrollView with the content I want to convert to pdf, but it only displays the visible part in pdf format, and not all scrollView content. here is my code

 -(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); } 
+4
source share
4 answers

This gives you the visible part of the 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; 

so you can use this in UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);
some minor parameter changes.

+1
source
 (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); } 
+1
source

This code that I used to create a pdf file from uiscrollview and it really helps, but it will not be as good as if we drew a PDF file, please look at the Pdf from UIScrollView

 - (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; } 
+1
source

The easiest way to convert the contents of a scroll view to a PDF file is to have the content view as the first subview of the scroll view and use this view to create a snapshot of the scroll view. The code in Swift will look like this:

 func generatePDFdata(withView view: UIView) -> NSData { let pageDimensions = view.bounds let outputData = NSMutableData() UIGraphicsBeginPDFContextToData(outputData, pageDimensions, nil) if let context = UIGraphicsGetCurrentContext() { UIGraphicsBeginPDFPage() view.layer.render(in: context) } UIGraphicsEndPDFContext() return outputData } 

Then you can use outputData to write to the PDF file:

 outputData.write(to: pdfFileUrl, atomically: true) 
0
source

Source: https://habr.com/ru/post/1481306/


All Articles