iOS:将UITableView渲染为PDF [英] iOS: Rendering UITableView into PDF

查看:105
本文介绍了iOS:将UITableView渲染为PDF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编写了pdfGenerator类来渲染整个UITableView以生成PDF。

I have written pdfGenerator class to render whole UITableView to generate PDF.

用法:

[pdfGenerator createPDFFromTableview:self.tableView];

课程方法:

- (void)createPDFFromTableview:(UITableView *)tableview {
    [tableview scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
    [self renderTableView:tableview];

    int rows = [tableview numberOfRowsInSection:0];
    int numberofRowsInView = 17;
    for (int i = 0; i < rows/numberofRowsInView; i++) {
        [tableview scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:(i+1)*numberofRowsInView inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
        [self renderTableView:tableview];
    }
}

- (void)renderTableView:(UITableView*)tableview {
    UIGraphicsBeginImageContext(tableview.frame.size);
    [tableview.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *tableviewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    UIGraphicsBeginPDFPage();
    [tableviewImage drawInRect:tableview.frame];
}

此代码正确滚动tableview但它仅为第一页创建PDF并且剩下的页面空白了!我不知道它为什么会发生这种情况,它应该按原样获取当前的uitableview快照并进行渲染,但它似乎仅针对第一页执行此操作。有人能指出这里可能出现的问题吗?有没有更好的方法来做我想要实现的目标?

This code scrolls tableview correctly but it create PDF only for first page and rest of pages are coming blank! I have no idea why it is happening while it should take current uitableview snapshot as is and render but it seems to do this only for first page. Can someone point out what could be wrong here? Is there any better way doing what I am trying to achieve?

以下给出相同的结果;

Following gives the same result;

int totalRows = [tableview numberOfRowsInSection:0];
int totalVisibleRows = 17;
for (int i = 0; i < ceil((float)totalRows/totalVisibleRows); i++) {
    [tableview scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:i * totalVisibleRows inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];

    [pdfGenerator renderTableView:tableview indexPathStart:[NSIndexPath indexPathForRow:i * totalVisibleRows inSection:0] indexPathEnd:[[tableview indexPathsForVisibleRows] lastObject]];
}

- (void)renderTableView:(UITableView*)tableview indexPathStart:(NSIndexPath *)startingIndexPath indexPathEnd:(NSIndexPath *)endIndexPath {
    CGRect rectToDraw = CGRectUnion([tableview rectForRowAtIndexPath:startingIndexPath], [tableview rectForRowAtIndexPath:endIndexPath]);

    NSLog(@"%@", NSStringFromCGRect(rectToDraw));

    UIGraphicsBeginImageContext(rectToDraw.size);
    [tableview.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *tableviewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    UIGraphicsBeginPDFPage();
    [tableviewImage drawInRect:rectToDraw];
}

输出rectToDraw:

Output rectToDraw:

{{0, 0}, {768, 720}}
{{0, 680}, {768, 720}}
{{0, 1360}, {768, 720}}
{{0, 2040}, {768, 360}}


推荐答案

在以编程方式滚动tableview之后,我最终呈现了持有tableview的视图。滚动后渲染tableview似乎不起作用!

I end-up rendering the view which is holding tableview after scrolling tableview programmatically. Rendering tableview doesn't seem to be working after scroll!

这篇关于iOS:将UITableView渲染为PDF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆