UITableView与许多页面的PDF(不能生成)
问题描述:
我想从tableView的整个内容生成PDF。我试过(我认为)从*所有的例子,他们只工作在tableView的行适合单个pdf页面的情况下。任何包含多于一页的数据都不能生成。UITableView与许多页面的PDF(不能生成)
目前使用的这个片段:(抱歉,不记得笔者)
var pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, CGRectMake(0, 0, 612,792), nil);
UIGraphicsBeginPDFPage();
self.view.layer.renderInContext(UIGraphicsGetCurrentContext()!)
self.tableView.scrollRectToVisible(CGRectMake(0, 0, 1, 1), animated:false)
self.tableView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let screensInTable:CGFloat = self.tableView.contentSize.height/self.tableView.frame.height;
print("how many screens: \(screensInTable)")
for i in 1..<Int(screensInTable) {
let contentOffset = CGPointMake(0, CGFloat(i) * 100)//self.tableView.frame.height
print("content offset: \(contentOffset)")
self.tableView.setContentOffset(contentOffset, animated:false)
self.tableView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
}
UIGraphicsEndPDFContext();
let activityViewController = UIActivityViewController(activityItems: [pdfData], applicationActivities: nil)
dispatch_async(dispatch_get_main_queue(), {
self.presentViewController(activityViewController, animated: false, completion: nil)
})
的问题是在行:self.tableView.setContentOffset(contentOffset,动画:假) 评论它,所有页面生成,但只有第一个有内容。离开这样的时候,activityViewController->打印预览不休加载预览
我还试图渲染单元的单内容查看,而是通过tableView.subviews进行遍历时,它仅包含视图中可见细胞
答
我的即使内容不可见,也为tableView生成了PDF。
主要逻辑是使用
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), rect.origin.x, -rect.origin.y);
如果y
值被转换为否定的,则所述内容的变化本身向上,以便可以快照下一组。如果没有,您只会收到可查看的屏幕截图。
以下是代码片段,我用从的tableView
func getScreenShot(aView : UIView, forRect rect : CGRect) -> UIImage {
// Preserve the previous frame and contentOffset of the scrollView (tableView)
let frame = aView.frame
var offset : CGPoint?
// Get offset only if view is scrollView
if let aView = aView as? UIScrollView {
offset = aView.contentOffset
}
UIGraphicsBeginImageContextWithOptions(rect.size, false, UIScreen.mainScreen().scale)
// Move the frame for the screenshot starting position
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), rect.origin.x, -rect.origin.y);
// Set the new size for the view
aView.frame.size = rect.size
// Set the new contentOffset for the view only if it's a scrollView
if let aView = aView as? UIScrollView {
aView.contentOffset.y = rect.origin.y
}
aView.drawViewHierarchyInRect(rect, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// Reset the previous frame
aView.frame = frame
// Reset offset only if view is scrollView
if let aView = aView as? UIScrollView {
aView.contentOffset = offset!
}
return image
}
生成图像您可以修改这个您的需要。此外,我会建议你使用
drawViewHierarchyInRect(rect, afterScreenUpdates: true)
,如果你支持的iOS 7及以上的,因为它比renderInContext
快得多。
仍然不能工作不幸:(结束了创建html并将其作为报告发送 – repoguy