如何在iOS中使用html创建pdf文件

时间:2016-01-08 04:56:59

标签: ios objective-c

我想生成一个带有文本的pdf文件,该文件每次都会根据我的服务器数据进行更改。我想在iOS中使用html创建该pdf文件。有什么建议。请帮忙。

提前致谢。

2 个答案:

答案 0 :(得分:2)

请查看以下链接:

https://github.com/iclems/iOS-htmltopdf

它有使用本地html文件和URL的方法。

+ (id)createPDFWithHTML:(NSString*)HTML pathForPDF:(NSString*)PDFpath delegate:(id <NDHTMLtoPDFDelegate>)delegate pageSize:(CGSize)pageSize margins:(UIEdgeInsets)pageMargins;
+ (id)createPDFWithHTML:(NSString*)HTML baseURL:(NSURL*)baseURL pathForPDF:(NSString*)PDFpath delegate:(id <NDHTMLtoPDFDelegate>)delegate pageSize:(CGSize)pageSize margins:(UIEdgeInsets)pageMargins;
+ (id)createPDFWithHTML:(NSString*)HTML pathForPDF:(NSString*)PDFpath pageSize:(CGSize)pageSize margins:(UIEdgeInsets)pageMargins successBlock:(NDHTMLtoPDFCompletionBlock)successBlock errorBlock:(NDHTMLtoPDFCompletionBlock)errorBlock;
+ (id)createPDFWithHTML:(NSString*)HTML baseURL:(NSURL*)baseURL pathForPDF:(NSString*)PDFpath pageSize:(CGSize)pageSize margins:(UIEdgeInsets)pageMargins successBlock:(NDHTMLtoPDFCompletionBlock)successBlock errorBlock:(NDHTMLtoPDFCompletionBlock)errorBlock;

答案 1 :(得分:0)

你可以试试这个:

  1. 您需要在webview上显示此内容

    -(IBAction)convertPDF:(id)sender { 
    webViewHeight = [[self.myWebView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"] integerValue];
    
        CGRect screenRect = self.myWebView.frame;
    
        double currentWebViewHeight = webViewHeight;
        while (currentWebViewHeight > 0)
        {
            imageName ++;
    
            UIGraphicsBeginImageContext(screenRect.size);
    
            CGContextRef ctx = UIGraphicsGetCurrentContext();
            [[UIColor blackColor] set];
            CGContextFillRect(ctx, screenRect);
    
            [self.myWebView.layer renderInContext:ctx];
    
            UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
            UIGraphicsEndImageContext();
    
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            NSString *pngPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png",imageName]];
    
            if(currentWebViewHeight < 960)
            {
                CGRect lastImageRect = CGRectMake(0, 960 - currentWebViewHeight, self.myWebView.frame.size.width, currentWebViewHeight);
                CGImageRef lastImageRef = CGImageCreateWithImageInRect([newImage CGImage], lastImageRect);                
                newImage = [UIImage imageWithCGImage:lastImageRef]; 
                CGImageRelease(lastImageRef);
            }
    
            [UIImagePNGRepresentation(newImage) writeToFile:pngPath atomically:YES];
    
            [self.myWebView stringByEvaluatingJavaScriptFromString:@"window.scrollBy(0,960);"];
            currentWebViewHeight -= 960;
        }
        [self drawPdf];
    }
    
  2. 然后从webview中提取PDF

     - (void) drawPdf
    { CGSize pageSize = CGSizeMake(612, webViewHeight);
    NSString *fileName = @"Demo.pdf";
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
    
    UIGraphicsBeginPDFContextToFile(pdfFileName, CGRectZero, nil);
    
    // Mark the beginning of a new page.
    UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil);
    
    double currentHeight = 0.0;
    
    for (int index = 1; index <= imageName ; index++)
    {
        NSString *pngPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png", index]];
        UIImage *pngImage = [UIImage imageWithContentsOfFile:pngPath];
    
        [pngImage drawInRect:CGRectMake(0, currentHeight, pageSize.width, pngImage.size.height)];        
        currentHeight += pngImage.size.height;
    }
    
    UIGraphicsEndPDFContext(); }
    
  3. 在viewDidLoad

    - (void)viewDidLoad
    {
    [super viewDidLoad];
    NSString *path;
    NSBundle *bundle = [NSBundle mainBundle];
    path = [bundle pathForResource:@"Demo" ofType:@"html"];
    
    NSURL *fileUrl = [NSURL URLWithString:@"https://www.google.com/sites/overview.html"];
    [self.myWebView loadRequest:[NSURLRequest requestWithURL:fileUrl]];
    }