在 Swift 中从 UIView 创建 PDF
Posted
技术标签:
【中文标题】在 Swift 中从 UIView 创建 PDF【英文标题】:Creating PDF from UIView in Swift 【发布时间】:2020-04-02 21:40:55 【问题描述】:我已经被困/研究这个问题好几天了,下面的方法成功地从常规大小的 UIView 创建了 pdf。但是,我需要位于 UIScrollview 内的 containerView 的内容。我的 containerView 的高度是 5000。有人可以帮我将 containerView 渲染成多个 PDF 页面,或者指导我找到更好的方法。 `func exportAsPdfFromView() -> 字符串
func screenShotScrollview() -> String
let scrollView = waiverViews.scrollView
let pageDimensions = scrollView.bounds
let pageSize = pageDimensions.size
let totalSize = scrollView.contentSize
let numberOfPagesThatFitVertivally = Int(ceil(totalSize.height/pageSize.height))
let outputData = NSMutableData()
UIGraphicsBeginPDFContextToData(outputData, pageDimensions, nil)
let savedContentOffset = scrollView.contentOffset
let savedContentInset = scrollView.contentInset
scrollView.contentInset = UIEdgeInsets.zero
let origin = CGRect(x: 0, y: 0, width: pageSize.width, height: pageSize.height)
if let context = UIGraphicsGetCurrentContext()
for indexVertical in 0..<numberOfPagesThatFitVertivally
UIGraphicsBeginPDFPageWithInfo(origin, nil)
let offsetVertical = CGFloat(indexVertical) * pageSize.height
scrollView.contentOffset = CGPoint(x: 0, y: offsetVertical)
context.translateBy(x: 0, y: -offsetVertical)
scrollView.layer.render(in: context)
UIGraphicsEndPDFContext()
scrollView.contentInset = savedContentInset
scrollView.contentOffset = savedContentOffset
return self.saveViewPdf(data: outputData)
【问题讨论】:
【参考方案1】:基本上,scrollView 不希望一直将所有内容呈现到其层,直到它被查看。
我猜这只是返回 UIScrollView 当前窗口的快照?
要拍摄 UIScrollView 的整个 contentBounds 的多个快照,您可能会在其总数 contentBounds.height/frame.height
中的滚动视图的 setTheContentOffset
中返回页面。然后在循环内生成PDF?
例如像这样,然后在 UX 方面,隐藏滚动视图。当它正在生成时,完成后将其取消隐藏。
for i in 0..<pages
scrollView.setContentOffset(.init(x: 0, y: i*scrollViewHeight))
//PDF Generation flow
//set the url to something like "pdf_file_\(i).pdf"
【讨论】:
你有这种方法的例子吗?我将不胜感激。 @WurlLink 我提供了一个示例 sn-p 这是否适用于我已经使用的方法?还是我必须一起尝试一种完全不同的方法? @WurlLink 我需要看看func saveViewPdf
做了什么来回答这个问题,但本质上它应该,如果将 pdf 数据写入本地文件
我已经尝试了您的答案,但不知何故,我只保存了前两页。我在我的问题中更新了我的代码。我非常感谢我能得到的任何帮助。以上是关于在 Swift 中从 UIView 创建 PDF的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中从 NSData 显示 PDF - 如何将 PDF 保存到文档文件夹 Swift - 如何在 Swift 中通过 WebView 从保存的 NSData 显示 PDF
在 Swift 中从 HTML 生成带有图像的 PDF 而不显示打印界面
Swift PDF 渲染任何 UIView 或 UIViewController PDFKit