使用Swift从UIScrollView创建PDF文件

5

我想从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页面,则该内容将被截断。

1
你传递了哪个视图?能给我们展示一下调用的位置吗?你是传递了滚动视图还是滚动视图的内容视图? - HAS
@JonasDeichelmann 你找到任何解决方案了吗? - YodagamaHeshan
很遗憾,@Yodagama。我的应用程序最终没有PDF功能。 - Jonas Deichelmann
1
@JonasDeichelmann 我可以使用这个Cocoapods框架来实现这个目标。在我的情况下,我想从电子表格中制作PDF,因此这个框架帮助我添加了具有不同列大小和许多其他我想要的功能的表格 https://cocoapods.org/pods/SimplePDF - YodagamaHeshan
1
@Yodagama 很好!你介意创建一个答案来回答我的问题,这样其他人就可以更容易地找到你的解决方案了吗? - Jonas Deichelmann
显示剩余5条评论
2个回答

0

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

https://cocoapods.org/pods/SimplePDF


你能分享一下代码或者说一下你是怎么做到的吗,比如你用了SimplePDF的哪些属性...我现在也卡在这里了。 - Nayan Dave

0
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,只有可见矩形。 - YodagamaHeshan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接