1

I used web view to load pdf also added an image as subview to my pdfView.

To save the final PDF with subviews,i tried the approach given in the below stack question, it meets the objective but it completely lost quality of the PDF

How to Convert UIView to PDF within iOS?

Now i am try with the below approach,

-(void)savePDFFromWebView:(UIWebView*)webView fileName:(NSString*)_fileName

{
    int height, width, header, sidespace;

    height = webView.scrollView.contentSize.height; 

    width = webView.scrollView.contentSize.width;

    header = 15;

    sidespace = 30;

    // set header and footer spaces

    UIEdgeInsets pageMargins = UIEdgeInsetsMake(header, sidespace, header, sidespace);

    webView.viewPrintFormatter.contentInsets = pageMargins;

    UIPrintPageRenderer *renderer = [[UIPrintPageRenderer alloc] init];

    [renderer addPrintFormatter:webView.viewPrintFormatter startingAtPageAtIndex:0];

    CGSize pageSize = CGSizeMake(width, height);

    CGRect printableRect = CGRectMake(pageMargins.left,
                                      pageMargins.top,
                                      pageSize.width - pageMargins.left - pageMargins.right,
                                      pageSize.height - pageMargins.top - pageMargins.bottom);

    CGRect paperRect = CGRectMake(0, 0, pageSize.width, pageSize.height);

    [renderer setValue:[NSValue valueWithCGRect:paperRect] forKey:@"paperRect"];

    [renderer setValue:[NSValue valueWithCGRect:printableRect] 

forKey:@"printableRect"];

    NSData *pdfData = [self printToPDFWithRenderer:renderer paperRect:paperRect];


    // save PDF file
    NSString *saveFileName = [NSString stringWithFormat:@"%@%dx%d.pdf", 

_fileName, (int)pageSize.width, (int)pageSize.height];

    NSString *savePath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) 

objectAtIndex:0] stringByAppendingPathComponent:saveFileName];

[pdfData writeToFile: savePath  atomically: YES];

}

-(NSData*) printToPDFWithRenderer:(UIPrintPageRenderer*)renderer  paperRect:(CGRect)paperRect

{

    NSMutableData *pdfData = [NSMutableData data];

    UIGraphicsBeginPDFContextToData( pdfData, paperRect, nil );

    [renderer prepareForDrawingPages: NSMakeRange(0, renderer.numberOfPages)];

    CGRect bounds = UIGraphicsGetPDFContextBounds();

    for ( int i = 0 ; i < renderer.numberOfPages ; i++ )

{
        UIGraphicsBeginPDFPage();

        [renderer drawPageAtIndex: i inRect: bounds];
    }

    UIGraphicsEndPDFContext();

    return pdfData;
}

Here the webView which pass as an input for UIPrintPageRenderer includes the

subviews but the final pdf does not includes subviews.

How to include subviews to save the final PDF?

Community
  • 1
  • 1
2vision2
  • 4,933
  • 16
  • 83
  • 164

0 Answers0