`
woniu1983
  • 浏览: 165754 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

将UIWebView存储为多页的PDF

    博客分类:
  • iOS
阅读更多
才开始正iOS开发,项目中要求预览doc,docx,ppt,excel等等文档时,将这些文档转换成PDF存储起来。

刚一开始想的方法自然就是Screen Capture,然后图片做PDF,那效果可想而知了,iPhone上截图就是固定的320*480,做出来的都是模糊的。

后来参考了网上的一个将HTML页面转存为多页的PDF的帖子,整了一段时间终于整出来了,效果还行,至少不是单纯图片,而且文字部分都能出来。

1. 子类化 UIPrintPageRenderer用于分页
 
@interface MyPrintPageRender : UIPrintPageRenderer

- (NSData*) convertUIWebViewToPDFsaveWidth: (float)pdfWidth saveHeight:(float) pdfHeight;

@end



@implementation MyPrintPageRender
{
    BOOL _generatingPdf;
}

- (CGRect) paperRect
{
    if (!_generatingPdf)
        return [super paperRect];
    
    return UIGraphicsGetPDFContextBounds();
}

- (CGRect) printableRect
{
    if (!_generatingPdf)
        return [super printableRect];
    
    return CGRectInset( self.paperRect, 20, 20 );
}

- (NSData*) convertUIWebViewToPDFsaveWidth: (float)pdfWidth saveHeight:(float) pdfHeight
{
    _generatingPdf = YES;
    
    NSMutableData *pdfData = [NSMutableData data];
    
    UIGraphicsBeginPDFContextToData( pdfData, CGRectMake(0, 0, pdfWidth, pdfHeight), nil );  
    
    [self prepareForDrawingPages: NSMakeRange(0, 1)];
    
    CGRect bounds = UIGraphicsGetPDFContextBounds();
    
    for ( int i = 0 ; i < self.numberOfPages ; i++ )
    {
        UIGraphicsBeginPDFPage();
        
        [self drawPageAtIndex: i inRect: bounds];
    }
    
    UIGraphicsEndPDFContext();
    
    _generatingPdf = NO;
    
    return pdfData;
}

@end




2. 调用PageRenderer的部分
// width 和height 按自己定义即可,比如说A4大小
float pdfWidth = 595.0f; 
float pdfHeight = 842.0f;

MyPrintPageRender *myRenderer = [[MyPrintPageRender alloc] init];
    UIViewPrintFormatter *viewFormatter = [self.imgView viewPrintFormatter];
    [myRenderer addPrintFormatter:viewFormatter startingAtPageAtIndex:0];
     
    NSData *pdfData = [myRenderer convertUIWebViewToPDFsaveWidth: pdfWidth saveHeight:pdfHeight];

    [pdfData writeToFile:fileFullPath atomically:YES];
    [myRenderer release];
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics