Ios 使用Swift生成PDF

Ios 使用Swift生成PDF,ios,swift,Ios,Swift,我想从Swift中的UITableView创建PDF。我找到了一些有关Objective C的教程,并进行了试用,但仍然没有由这段代码生成的文件 // get a temprorary filename for this PDF var path = NSTemporaryDirectory(); var pdfFilePath = path.stringByAppendingPathComponent("mypdfdocument.pdf")

我想从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逐行创建更好


提前谢谢

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

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
    }
}
这相当简单。首先,我创建pdf上下文。然后循环查看
视图
数组。对于每个视图,它将视图渲染为pdf上下文


我希望这会有所帮助。

谢谢你的回答。我不知道如何使用“模板”视图我这里有9种不同的单元格布局,所以我需要创建一个视图(为我所有的单元格?)并用我的数据填充它们?你能详细说明“createTemplatePageViewWithParsedEntry”中发生了什么吗?您将模型插入到哪个视图中,该视图是如何处理的?它创建了一个表示pdf页面的UIView@拉普塞法罗:好的。并将其作为子视图添加到作为参数的
视图
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
}