Latest 2.1
Homepage https://github.com/sgr-ksmt/PDFGenerator
License MIT
Platforms ios 8.0, requires ARC
Frameworks WebKit
Authors

Features |
Requirements |
Installation |
Usage |
Communication |
LICENSE

Build Status
GitHub release
codecov
[Language]()
Carthage
CocoaPods
[CocoaPodsDL]()
Awesome

PDFGenerator is a simple PDF generator that generates with UIView, UIImage, …etc .

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)
}

Features

  • Swift 4 is ready :thumbsup:
  • Multiple pages support.
  • Also generate PDF with image path, image binary, image ref (CGImage)
  • Good memory management.
  • UIScrollView support : If view is UIScrollView, UITableView, UICollectionView, UIWebView, drawn whole content.
  • Outputs as binary(Data) or writes to Disk(in given file path) directly.
  • Corresponding to Error-Handling. Strange PDF has never been generated!!.
  • DPI support. : Default dpi is 72.
  • Password protection support.

Requirements

  • iOS 8.0+
  • Xcode 7.0
  • Swift 2+

Installation

Carthage

  • Add the following to your Cartfile:
# for Swift 4
github "sgr-ksmt/PDFGenerator" ~> 2.1

# for Swift 3
github "sgr-ksmt/PDFGenerator" ~> 2.0.1

# Swift 2
## Swift 2.2
github "sgr-ksmt/PDFGenerator" ~> 1.4.3
## Swift 2.3
github "sgr-ksmt/PDFGenerator" "swift-2.3"
  • Then run command:
$ carthage update

CocoaPods

PDFGenerator is available through CocoaPods. To install
it, simply add the following line to your Podfile:

# for Swift 4 
pod 'PDFGenerator', '~> 2.1'

# for Swift 3
pod 'PDFGenerator', '~> 2.0.1'

# for Swift 2
## Swift 2.2
pod 'PDFGenerator', '~> 1.4.3'
## Swift 2.3
pod 'PDFGenerator', :branch => 'swift-2.3'

and run pod install

Notice (Swift3.0)

This branch is beta yet. If you found a bug, please create issue. :bow:

Usage

Generate from view(s) or image(s)

  • 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])
        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)
    }
}

Also PDF can generate from image(s), image path(s) same as example.

Generate from PDFPage object

  • (UIVIew or UIImage) → PDF

Use 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)
    }
}

Generate custom 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)
    }
}

Password protection

// 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)
    }
}

Communication

  • If you found a bug, please open an issue. :bow:
  • Also, if you have a feature request, please open an issue. :thumbsup:
  • If you want to contribute, submit a pull request.:muscle:

License

PDFGenerator is under MIT license. See the LICENSE file for more info.

Latest podspec

{
    "name": "PDFGenerator",
    "version": "2.1",
    "summary": "A simple PDF generator.",
    "homepage": "https://github.com/sgr-ksmt/PDFGenerator",
    "license": "MIT",
    "authors": {
        "Suguru Kishimoto": "[email protected]"
    },
    "source": {
        "git": "https://github.com/sgr-ksmt/PDFGenerator.git",
        "tag": "2.1"
    },
    "platforms": {
        "ios": "8.0"
    },
    "requires_arc": true,
    "source_files": "PDFGenerator/**/*",
    "frameworks": "WebKit",
    "pushed_with_swift_version": "4.0"
}

Pin It on Pinterest

Share This