2013-06-05 3 views
0

Я хочу знать, как получить PDF-код с HTML-страницы.Как получить PDF-файл с HTML-страницы (UIWebView)

Im использованием метода

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 как некоторые части многостраничного PDF обрезается и происходит сбой приложения, если это займет более 10 секунд.

Я скачал 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-файл в PDF, который использует UIPrintPageRenderer.

Пожалуйста, помогите мне ..

+0

это [Учебник] (HTTP: //www.ioslearner .com/convert-html-uiwebview-pdf-iphone-ipad /) –

ответ

2

// Pass 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

Смежные вопросы