2013-06-05 54 views
0

我想知道如何从HTML页面获取PDF。如何从HTML页面获取PDF(UIWebView)

进出口使用的方法

UIGraphicsBeginPDFContextToFile(self.filePath, CGRectZero, nil); //creating PDF 

    int i = 0; 
    for (; i < pages; i++) 
    { 
     if (pageHeight * (i+1) > height) 
     { 
      CGRect f = [myWebPage frame]; 
      f.size.height -= (((i+1) * pageHeight) - height); 
      [myWebPage setFrame: f]; 
     } 
     // Specify the size of the pdf page 
     UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, width, pageHeight), nil); 
     CGContextRef currentContext = UIGraphicsGetCurrentContext(); 
     [[[myWebPage subviews] lastObject] setContentOffset:CGPointMake(0, pageHeight * i) animated:NO]; 
     [myWebPage.layer renderInContext: currentContext]; 
     NSLog(@"I = %d",i); 
    } 

UIGraphicsEndPDFContext(); 
[[[myWebPage subviews] lastObject] setContentOffset:CGPointMake(0, 0) animated:NO]; 
[myWebPage setFrame:origframe]; 

但是一些多页PDF的部分被裁剪并导致崩溃的应用程序,如果需要更多然后在10秒这不会给适当的PDF。

我已经下载https://github.com/iclems/iOS-htmltopdf此文件,并使用NDHTMLtoPDF.h和NDHTMLtoPDF.m文件..

其做工精细..

但是当我试图使用单独的功能,如

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
if (webView.isLoading) return; 

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

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

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

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

[render setValue:[NSValue valueWithCGRect:paperRect] forKey:@"paperRect"]; 
[render setValue:[NSValue valueWithCGRect:printableRect] forKey:@"printableRect"]; 

NSData *pdfData = [render printToPDF]; 

[pdfData writeToFile: self.PDFpath atomically: YES]; 

[self terminateWebTask]; 

if (self.delegate && [self.delegate respondsToSelector:@selector(HTMLtoPDFDidSucceed:)]) 
    [self.delegate HTMLtoPDFDidSucceed:self]; 


} 

- (NSData*) printToPDF 
{ 
NSMutableData *pdfData = [NSMutableData data]; 

UIGraphicsBeginPDFContextToData(pdfData, self.paperRect, nil); 

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

CGRect bounds = UIGraphicsGetPDFContextBounds(); 

for (int i = 0 ; i < self.numberOfPages ; i++) 
{ 
    UIGraphicsBeginPDFPage(); 

    [self drawPageAtIndex: i inRect: bounds]; 
} 

UIGraphicsEndPDFContext(); 

return pdfData; 
} 

其显示p花边

NSData *pdfData = [render printToPDF]; 
[self prepareForDrawingPages: NSMakeRange(0, self.numberOfPages)]; 
[self drawPageAtIndex: i inRect: bounds]; 

因为它无法找到函数和变量。

,但在代码中他们没有像申报和numberOfPages所有,但他们所得到的解决方案,但即时得到错误的变量..

任何人都可以请给我正确的代码和步骤获得的打印甲酸HTML文件转换为使用UIPrintPageRenderer的PDF。

请帮助我..

+0

检查此[教程](HTTP后://www.ioslearner .com/convert-html-uiwebview-pdf-iphone-ipad /) –

回答

2

//传入HTML字符串这里

NSString *str_PDFName_path = [NSString stringWithFormat:@"~/Library/MyFile.pdf"]; 
    self.PDFCreator = [NDHTMLtoPDF createPDFWithHTML:str_HTML pathForPDF:[str_PDFName_path stringByExpandingTildeInPath] delegate:self pageSize:kPaperSizeA4 margins:UIEdgeInsetsMake(20, 5, 90, 5)]; 

//这样

- (NSData*) printToPDF 
{ 
    NSMutableData *pdfData = [NSMutableData data]; 
    //595, 842 
    UIGraphicsBeginPDFContextToData(pdfData, CGRectMake(0, 20, 595, 842), nil); 

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

    //CGRect bounds = UIGraphicsGetPDFContextBounds(); 

    for (int i = 0 ; i < self.numberOfPages ; i++) 
    { 
     UIGraphicsBeginPDFPage(); 

     [self drawPageAtIndex: i inRect: CGRectMake(120, 770, 500, 15)]; //bounds]; 
     //CGRect textRect = [self addText:@"Centurion Medical Products | 100 Centurion Way | Williamston MI USA 48895 | 800.248.4058" 
     //      withFrame:CGRectMake(120, 770, 500, 15) fontSize:8.0f]; 
     CGContextRef currentContext = UIGraphicsGetCurrentContext(); 
     CGContextSetRGBFillColor(currentContext, 99/255.f, 100/255.f, 99/255.f, 1.0f); 

     [self addText:@"Medical Products | 100 Centurion Way | Williamston MI USA 48895 | 800.248.4058" 
           withFrame:CGRectMake(130, 770, 500, 15) fontSize:8.0f]; 
     UIImage *anImage = [UIImage imageNamed:@"logo.gif"]; 
     //CGRect imageRect = [self addImage:anImage 
     //       atPoint:CGPointMake(50, 768)]; 
     [self addImage:anImage atPoint:CGPointMake(50, 768)]; 
    } 

    UIGraphicsEndPDFContext(); 

    return pdfData; 
} 
+0

感谢您的回答..但我不想使用NDHTMLtoPDF.h和NDHTMLtoPDF.m类.. – Raju