gpt4 book ai didi

ios - 使用 Swift 生成 PDF

转载 作者:搜寻专家 更新时间:2023-10-30 21:54:11 25 4
gpt4 key购买 nike

我想在 Swift 中从 UITableView 创建一个 PDF。我找了一些 Objective C 的教程,并试了一下,但是这段代码仍然没有生成文件。

        // get a temprorary filename for this PDF

var path = NSTemporaryDirectory();
var pdfFilePath = path.stringByAppendingPathComponent("mypdfdocument.pdf")

UIGraphicsBeginPDFContextToFile(pdfFilePath, CGRectMake(0, 0, self.tableView.contentSize.width, self.tableView.contentSize.height), nil)
UIGraphicsBeginPDFPage();
self.view.layer.renderInContext(UIGraphicsGetCurrentContext())
self.tableView.scrollRectToVisible(CGRectMake(0, 0, 1, 1), animated: false)
self.tableView.layer.renderInContext(UIGraphicsGetCurrentContext())

var screensInTable = Int(self.tableView.contentSize.width) / Int(self.tableView.contentSize.height)

for i in 1...screensInTable {

var point = CGFloat(CGFloat(i) * self.tableView.bounds.height)
var contentOffset:CGPoint = CGPointMake(0, point)
self.tableView.setContentOffset(contentOffset, animated: false)
self.tableView.layer.renderInContext(UIGraphicsGetCurrentContext())
}

UIGraphicsEndPDFContext();

并且:我有一个包含 4 个部分和不同行高和单元格模板的表格。是否有可能使用此类代码轻松生成 PDF?或者用 CoreText 逐行创建会更好吗?

提前致谢。

最佳答案

这是我的方法。使用模板 View 。它具有所有静态文本和图像。然后对于 pdf 中的每个页面使用此模板 View 。这是我使用的函数:

func renderAsPDF(demandEntry: ParsedDemandEntry, inView view: UIView) -> NSData? {
let entries = demandEntry.demands
let pageCount = Int(ceil(Double(entries.count) / Double(demandCountForPage)))
if pageCount != 0 {
let views = (1...pageCount).map { (pageNumber: Int) -> UIView in
let pdfPageView = createTemplatePageViewWithParsedEntry(demandEntry, inView: view)

let pageRange = ((pageNumber - 1) * demandCountForPage)..<(min(pageNumber * demandCountForPage, entries.count))
let entriesForPage = Array(entries[pageRange])

addEntries(entriesForPage, toView: pdfPageView)

pdfPageView.removeFromSuperview()

return pdfPageView
}

return toPDF(views)
} else {
return nil
}
}

ParsedDemandEntry 是我的模型对象。 view 参数是一个容器 View ,用于在其中准备 pdf View 。这是必要的,因为我使用自动布局在 pdf View 中定位所有标签。没有 super View 布局过程将无法工作。

让我们走进函数。首先,我从模型对象中获取条目。认为这些是需要在 pdf 中填充的行。之后我计算我需要多少页。然后循环开始。在每个循环中,我都创建了一个模板 View 。 (pdfPageView)。然后用条目填充它。 (addEntries(_:toView:) 函数调用)。

在循环之后,我将所有 View 提供给 toPDF 函数。它创建代表 pdf 的 NSData。以下是 toPDF 函数的样子:

private func toPDF(views: [UIView]) -> NSData? {

if views.isEmpty {
return nil
}

let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, CGRect(x: 0, y: 0, width: 612, height: 792), nil)

let context = UIGraphicsGetCurrentContext()

for view in views {
UIGraphicsBeginPDFPage()
view.layer.renderInContext(context)
}

UIGraphicsEndPDFContext()

return pdfData
}

这很简单。首先我创建 pdf 上下文。然后遍历 views 数组。对于每个 View ,它将 View 呈现为 pdf 上下文。

希望对您有所帮助。

关于ios - 使用 Swift 生成 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26817618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com