PDFGenerator 3.1.0

PDFGenerator 3.1.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2019年11月
SPM支持SPM

sgr-ksmt维护。



  • 作者
  • Suguru Kishimoto

特性 | 要求 | 安装 | 使用 | 交流 | 授权协议

PDFGenerator

Build Status GitHub release codecov Language Carthage CocoaPods CocoaPodsDL Awesome Reviewed by Hound

PDFGenerator是一个使用UIViewUIImage等生成的简单PDF生成器。

do {
    let page: [PDFPage] = [
        .whitePage(CGSize(width: 200.0, height: 100.0)),
        .image(image1)
        .image(image2)
        .imagePath(lastPageImagePath)
        .whitePage(CGSize(width: 200.0, height: 100.0))
    ]
    let path = NSTemporaryDirectory().appending("sample1.pdf")
    try PDFGenerator.generate(page, to: path, password: "123456")
} catch let error {
    print(error)
}

特性

  • Swift 4已经准备好 👍
  • 支持多页。
  • 还可以使用image pathimage binaryimage ref (CGImage)生成PDF。
  • 良好的内存管理。
  • UIScrollView支持:如果视图是UIScrollViewUITableViewUICollectionViewUIWebView,则绘制整个内容。
  • 以二进制(Data)输出或直接写入磁盘(给定的文件路径)。
  • 与错误处理对应。PDF永远不会出现异常!!!
  • 支持DPI。默认dpi是72。
  • 支持密码保护。

要求

  • iOS 8.0+
  • Xcode 10+
  • Swift 4.2

安装

Carthage

  • 将以下内容添加到您的 Cartfile
github "sgr-ksmt/PDFGenerator" ~> 3.0
  • 然后执行以下命令
$ carthage update

CocoaPods

PDFGenerator 可以通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile

pod 'PDFGenerator', '~> 3.0'

然后运行 pod install

注意(Swift3.0)

此分支仍为测试版。如果发现问题,请创建问题报告。🙇

使用

从视图或图像生成

  • UIView → PDF
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])
        try 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)
    }
}

也可以从图像生成 PDF,图像路径与示例相同。

从PDFPage对象生成

  • (UIVIew 或 UIImage) → PDF

使用 PDFPage

public enum PDFPage {
    case whitePage(CGSize) // = A white view
    case view(UIView)
    case image(UIImage)
    case imagePath(String)
    case binary(Data)
    case imageRef(CGImage)
}
func generatePDF() {
    let v1 = UIView(frame: CGRect(x: 0.0,y: 0, width: 100.0, height: 100.0))
    v1.backgroundColor = .red
    let v2 = UIView(frame: CGRect(x: 0.0,y: 0, width: 100.0, height: 200.0))
    v2.backgroundColor = .green

    let page1 = PDFPage.View(v1)
    let page2 = PDFPage.View(v2)
    let page3 = PDFPage.WhitePage(CGSizeMake(200, 100))
    let page4 = PDFPage.Image(UIImage(contentsOfFile: "path/to/image1.png")!)
    let page5 = PDFPage.ImagePath("path/to/image2.png")
    let pages = [page1, page2, page3, page4, page5]

    let dst = NSTemporaryDirectory().appending("sample1.pdf")
    do {
        try PDFGenerator.generate(pages, to: dst)
    } catch (let e) {
        print(e)
    }
}

生成自定义DPI PDF

// generate dpi300 PDF (default: 72dpi)
func generatePDF() {
    let v1 = UIView(frame: CGRect(x: 0.0,y: 0, width: 100.0, height: 100.0))
    v1.backgroundColor = .red
    let v2 = UIView(frame: CGRect(x: 0.0,y: 0, width: 100.0, height: 200.0))
    v2.backgroundColor = .green

    let page1 = PDFPage.View(v1)
    let page2 = PDFPage.View(v2)
    let pages = [page1, page2]

    let dst = NSTemporaryDirectory().appending("sample1.pdf")
    do {
        try PDFGenerator.generate(pages, to: dst, dpi: .dpi_300)
    } catch (let e) {
        print(e)
    }
}

密码保护

// generate PDF with password: 123456
func generatePDF() {
    let v1 = UIView(frame: CGRect(x: 0.0,y: 0, width: 100.0, height: 100.0))
    v1.backgroundColor = .red
    let v2 = UIView(frame: CGRect(x: 0.0,y: 0, width: 100.0, height: 200.0))
    v2.backgroundColor = .green

    let page1 = PDFPage.view(v1)
    let page2 = PDFPage.view(v2)
    let pages = [page1, page2]

    let dst = NSTemporaryDirectory().appending("sample1.pdf")
    do {
        try PDFGenerator.generate(pages, to: dst, password: "123456")
        // or use PDFPassword model
        try PDFGenerator.generate(pages, to: dst, password: PDFPassword("123456"))
        // or use PDFPassword model and set user/owner password
        try PDFGenerator.generate(pages, to: dst, password: PDFPassword(user: "123456", owner: "abcdef"))
    } catch let error {
        print(error)
    }
}

通信

  • 如果您发现了一个错误,请提交一个问题。🙇
  • 此外,如果您有功能请求,也请提交一个问题。👍
  • 如果您想做出贡献,请提交一个pull请求。💪

许可

PDFGenerator 采用MIT许可。查看 LICENSE 文件了解更多信息。