【问题标题】:Create a PDF file from a UIScrollView in Swift在 Swift 中从 UIScrollView 创建 PDF 文件
【发布时间】:2018-05-16 06:57:00
【问题描述】:

我想从 UIScrollView 的内容创建一个 PDF 文件。

func createPdfFromView(aView: UIView, saveToDocumentsWithFileName fileName: String) {
    let pdfData = NSMutableData()
    let height = 1754.0
    let width = 1240.0
    UIGraphicsBeginPDFContextToData(pdfData, CGRect(x:-30, y:15,width:width,height:height) , nil)
    UIGraphicsBeginPDFPage()
    guard let pdfContext = UIGraphicsGetCurrentContext() else { return }

    aView.layer.render(in: pdfContext)
    UIGraphicsEndPDFContext()

    if let documentDirectories = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first {
        let documentsFileName = documentDirectories + "/" + fileName
        debugPrint(documentsFileName)
        pdfData.write(toFile: documentsFileName, atomically: true)
    }
}

我希望代码会根据滚动视图中内容的大小生成 PDF。

该代码目前仅生成静态 PDF。如果滚动视图中的内容大于 PDF 页面,则内容被截断。

【问题讨论】:

  • UIScrollView 中的内容(实际上是 any 滚动视图)仅在操作系统认为有必要时才会呈现(想象一个有 1,000 行的表格视图)。因此,简单地告诉一个图层进行渲染并不能达到您的期望。已经有很多很多示例了-我建议搜索swift pdf from uiscrollview,看看是否找不到适合您的东西需要(或为您指明正确的方向)。
  • 你通过哪种观点?你能告诉我们通话地点吗?你传递的是滚动视图还是滚动视图的 contentView?
  • @HAS 是的,它是由 Spreadsheet 框架生成的电子表格。函数调用:createPdfFromView(aView: spreadsheetView, saveToDocumentsWithFileName: "Spread.pdf")
  • 我还想从完整的电子表格视图中获取 PDF。如果您对此有解决方案,请帮助我
  • @JonasDeichelmann 我可以使用这个 Cocoapods 框架来实现这一点。在我的情况下,我想从 Spreadsheet 制作一个 PDF,以便这个框架帮助我添加具有不同列大小的表格和更多我想要的功能 cocoapods.org/pods/SimplePDF

标签: ios swift pdf uiscrollview scrollview


【解决方案1】:

我可以使用这个 Cocoapods 框架来实现这一点。在我的情况下,我想从 Spreadsheet 制作一个 PDF,以便这个框架帮助我添加具有不同列大小的表格以及我想要从我的数据中获得的更多功能。

https://cocoapods.org/pods/SimplePDF

【讨论】:

    【解决方案2】:
    func createPdfFromView()
    {
        // Set frame as per content of view
    
        self.spreadsheetView.frame = CGRect(x: 0, y: 0, width: self.spreadsheetView.contentSize.width, height: self.spreadsheetView.contentSize.height)
        let pdfPageBounds: CGRect = self.spreadsheetView.frame
        let pdfData: NSMutableData = NSMutableData()
    
        // Rendering spreadsheetView
        UIGraphicsBeginPDFContextToData(pdfData, pdfPageBounds, nil)
        UIGraphicsBeginPDFPageWithInfo(pdfPageBounds, nil)
        self.spreadsheetView.layer.render(in: UIGraphicsGetCurrentContext()!)
        UIGraphicsEndPDFContext()
        let documentDirectories = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first
        let documentsFileName = documentDirectories! + "/" + "pdfName.pdf"
        pdfData.write(toFile: documentsFileName, atomically: true)
        print(documentsFileName)
    
        // Reset spreadsheetView
        self.spreadsheetView.frame = CGRect(x: 0, y: 64, width: self.view.frame.width, height: self.view.frame.height)
        self.spreadsheetView.layoutSubviews()
        self.spreadsheetView.layoutIfNeeded()
        self.spreadsheetView.reloadData()}
    

    希望它能帮助您从电子表格创建 PDF。

    参考。 Github代码链接:SpreadsheetView

    【讨论】:

    • 我没有将整个内容视图作为 pdf ,只有可见的矩形
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2013-03-26
    相关资源
    最近更新 更多