2013-06-05 56 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