How to Convert UIView to PDF within iOS? How to Convert UIView to PDF within iOS? ios ios

How to Convert UIView to PDF within iOS?


Note that the following method creates just a bitmap of the view; it does not create actual typography.

(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];    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);}

Also make sure you import: QuartzCore/QuartzCore.h


Additionally, if anyone is interested, here is the Swift 3 code:

func createPdfFromView(aView: UIView, saveToDocumentsWithFileName fileName: String){    let pdfData = NSMutableData()    UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil)    UIGraphicsBeginPDFPage()    guard let pdfContext = UIGraphicsGetCurrentContext() else { return }    aView.layer.render(in: pdfContext)    UIGraphicsEndPDFContext()    if let documentDirectories = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first {        let documentsFileName = documentDirectories + "/" + fileName        debugPrint(documentsFileName)        pdfData.write(toFile: documentsFileName, atomically: true)    }}


If someone is interested, here's Swift 2.1 code:

    func createPdfFromView(aView: UIView, saveToDocumentsWithFileName fileName: String)    {        let pdfData = NSMutableData()        UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil)        UIGraphicsBeginPDFPage()        guard let pdfContext = UIGraphicsGetCurrentContext() else { return }        aView.layer.renderInContext(pdfContext)        UIGraphicsEndPDFContext()        if let documentDirectories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first {            let documentsFileName = documentDirectories + "/" + fileName            debugPrint(documentsFileName)            pdfData.writeToFile(documentsFileName, atomically: true)        }    }