如何将完整的uicollectionview打印到图像或pdf

时间:2016-08-03 16:13:14

标签: ios iphone swift uiview printing

大家好!

我在Swift 3中工作,但如果在Swift 3中没有解决方案,我愿意在Swift 2中工作。

我有一个UICollectionView和UIImageView,它包含在UIView中以及一个图像(所有这些都包含在UIScrollView中,这意味着很多内容都在屏幕外)。如果我无法弄清楚如何使用UICollectionView和UIImageView的完整内容打印出UIView(或至少是UICollectionView)的内容,那么我制作的应用程序将毫无用处。

我已经研究了一天,并提出了我将在下面列出的资源,但我仍然无法弄清楚如何实现我的目标。有没有人对我有任何建议?

打印出集合视图的一种可能的替代方法是创建包含在集合视图中的信息的PDF或图像(每个单元格一个图像和3个标签),而不必打印集合视图本身。如果你能指出一种方法,那将同样有用。

感谢您的时间!

我的研究结果:(堆栈溢出不会让我发布超过两个链接,所以原谅切碎的链接) Apple文档:(我现在还无法理解这一点,但我正在努力解决这个问题。) https://developer。 apple .com /library/ios/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GeneratingPDF/GeneratingPDF.html

框架的疯狂存储库,包括pdf生成器: github上。 com / vsouza / awesome-ios#pdf

如何使用swift将UIView转换为图像:(我无法判断这是否会截取页面上的内容,或者是否会截取整个视图的屏幕截图。) How to convert a UIview to a image

Apple函数文档:(这是对上述stackoverflow问题链接的补充。) 开发商。苹果。 COM /库/ IOS /文档/ UIKit的/参考/ UIKitFunctionReference /#// apple_ref / C / FUNC / UIGraphicsGetImageFromCurrentImageContext

PDFGenerator :(这是最有潜力的,但我还无法弄清楚如何使用它。) https://github.com/sgr-ksmt/PDFGenerator

1 个答案:

答案 0 :(得分:0)

PDFGenerator Features

  • UIScrollView支持:如果视图是UIScrollView,UITableView,UICollectionView,UIWebView,则绘制整个内容。

他们在github上也有一个演示应用程序。

示例 fonte ScrollView

func generatePDF() {
    let v1 = UIScrollView(frame: CGRect(x: 0.0,y: 0, width: 100.0, height: 100.0))
    let v2 = UIView(frame: CGRect(x: 0.0,y: 0, width: 100.0, height: 200.0))
    let v3 = UIView(frame: CGRect(x: 0.0,y: 0, width: 100.0, height: 200.0))
    v1.backgroundColor = .red
    v1.contentSize = CGSize(width: 100.0, height: 200.0)
    v2.backgroundColor = .green
    v3.backgroundColor = .blue

    let dst = URL(fileURLWithPath: NSTemporaryDirectory().appending("sample1.pdf"))
    // outputs as Data
    do {
        let data = try PDFGenerator.generated(by: [v1, v2, v3])
        data.write(to: dst, options: .atomic)
    } catch (let error) {
        print(error)
    }

    // writes to Disk directly.
    do {
        try PDFGenerator.generate([v1, v2, v3], to: dst)    
    } catch (let error) {
        print(error)
    }
}