我已经编写了 pdfGenerator 类来渲染整个 UITableView 以生成 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];
}
此代码正确滚动表格视图,但它仅为第一页创建 PDF,其余页面变为空白!我不知道为什么会发生这种情况,而它应该按原样获取当前的 uitableview 快照并进行渲染,但它似乎只对第一页执行此操作。有人可以指出这里可能有什么问题吗?有没有更好的方法来做我想要实现的目标?
[编辑]
以下给出了相同的结果;
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:
{{0, 0}, {768, 720}}
{{0, 680}, {768, 720}}
{{0, 1360}, {768, 720}}
{{0, 2040}, {768, 360}}