`
woniu1983
  • 浏览: 167510 次
  • 性别: 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];
分享到:
评论

相关推荐

    使用pdfview加载PDF文件

    通过上述讨论,我们可以看出,使用PDFView加载PDF文件不仅是展示文档那么简单,还包括了用户体验、文件管理、安全性和扩展性等多个方面的技术考量。在实际开发过程中,需要根据具体需求和技术栈选择合适的工具和方法...

    ios-PDF转换器.zip

    3. **多张图片转PDF**:在iOS应用中,用户可能需要将多张照片合并为一个PDF文档。这通常通过读取图片数据,然后创建PDF页面并添加这些图片到每个页面上实现。 4. **UIWebView转图片**:UIWebView是iOS中用于展示...

    ios源码_PDF电子书阅读器

    这个过程可以通过Core Graphics框架来实现,将PDF页面转换为UIImage对象。 5. 远程PDF文件下载: 对于远程PDF文件,应用需要实现网络通信功能。通常使用URLSession或第三方库如Alamofire来发起HTTP请求,下载文件...

    WebKit和Chromium源码及原理剖析.pdf

    - iOS Safari和WebKit通过传感器获取设备的物理方向信息,并将其转换为JavaScript事件传递给网页。 - 开发者可以通过监听`deviceorientation`事件来捕获这些信息,并根据需要进行处理。 #### 第6篇 使用支持SPDY...

    D_S_PDF-master.zip

    再结合` UIGraphicsBeginPDFContextToFile`和`UIGraphicsGetPDFContextBounds`等方法,可以将PDF页面渲染到自定义的UIView或UIImageView中,实现逐页加载和展示。这种方法对于自定义显示效果和交互更灵活,但编程...

    previewDemo

    综上所述,"previewDemo"项目提供了一个使用`UIPreviewController`预览PDF的实例,涉及到了iOS中的PDF显示技术、交互设计以及性能优化等多个方面。开发者可以从这个示例中学习到如何优雅地在iOS应用中集成PDF预览...

    PDF-Archive-Viewer:PDF Archiver的文档查看器

    PDF-Archive-Viewer 是一个专为查看PDF档案设计的应用程序,尤其针对PDF Archiver的文档。这个项目基于Swift编程语言,适用于iOS平台,为用户提供高效、便捷的PDF阅读体验。在iOS设备上,用户可以利用此应用浏览和...

    IOS实例开发源码——自制超简易电子书,页码问题解决版.zip

    综上所述,这个实例项目涵盖了iOS开发中的多个核心概念,包括PDF处理、自定义UI设计、数据存储、多线程以及性能优化。对于想要学习或提升iOS开发技能的开发者来说,这是一个极好的实践案例。通过深入研究源代码,...

    第四章:原生App优化.pdf

    iOS 12后,UIWebView已被标记为Deprecated并停止维护。 - **WKWebView**:苹果公司自WWDC 2014起推出的新型WebView组件,相较于UIWebView在性能、稳定性、内存占用上有显著改进。具有更高的滚动刷新率、支持右滑...

    _ihtml5_frontEndBooks 移动开发.pdf

    在彩票H5订单系统V3.0版本的开发中,引入了本地化策略,将应用打包到客户端内部,并使用多页面应用架构,利用Local Storage进行页面间通信,以提升性能。这一阶段放弃了对pad和phone的兼容性,针对特定设备进行个性...

    一个iPhone项目的源代码

    这个压缩包文件包含了一个完整的iPhone项目源代码,涵盖了多个功能模块,如电子书(epub)阅读、PDF处理、微型条形码(microbar)生成、视频播放以及音乐播放,并且支持网页浏览(webview)。接下来,我们将深入探讨这些...

    IOS应用源码之自制超简易电子书,页码问题解决版.zip

    在iOS应用开发中,制作一...通过研究这个项目,开发者不仅可以掌握UIPageViewController和PDF阅读器的实现,还能深入了解iOS应用开发中的数据管理、用户界面设计以及性能优化等多个方面,对于提升iOS开发技能大有裨益。

    MKTips 电子书类源码_ios源码

    为了展示电子书内容,MKTips可能利用`PDFKit`或`UIWebView`来加载和渲染PDF文档。这涉及到PDF文件的解析和页面滚动优化。 8. **本地化**: 对于多语言支持,源码可能会包含国际化资源文件(.strings文件),以及...

    android实用案例

    1. **实验六.pdf**:这可能是一个详细的教程或案例分析,通常会介绍一个具体的开发任务,如网络请求、数据存储或者特定UI组件的使用。PDF文件可能包含步骤指导、代码示例和最佳实践。 2. **UIRatingsBar**:这涉及...

    七大swift-demo.zip

    开发者需要理解如何实现多线程(如使用GCD或OperationQueue)、网络通信协议(如XMPP或WebSocket)、以及数据库存储(如CoreData或SQLite)来存储聊天记录。 5. **阅读器应用**:可能是一个电子书阅读器,需要处理...

    iphone textreader 2.0 源代码

    源代码中可能有一个解析器负责将这些格式转换为统一的数据结构,然后由视图控制器渲染到屏幕上。苹果的UIKit框架提供了丰富的视图组件,如UILabel和UIWebView,用于呈现文本和图片。 3. **用户界面**:良好的用户...

Global site tag (gtag.js) - Google Analytics