sgr-ksmt
PDFGenerator
Swift

A simple generator of PDF written in Swift.

Last updated Jul 3, 2026
766
Stars
109
Forks
50
Issues
0
Stars/day
Attention Score
54
Language breakdown
No language data available.
โ–ธ Files click to expand
README

Features | Requirements | Installation | Usage | Communication | LICENSE

PDFGenerator

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

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 5 is ready :pray:
  • 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 9.0+
  • Xcode 11+
  • Swift 5.1

Installation

Carthage

  • Add the following to your Cartfile:
github "sgr-ksmt/PDFGenerator" ~> 3.1
  • Then run command:
$ carthage update
  • Add the framework as described.

Details: Carthage Readme

CocoaPods

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

pod 'PDFGenerator', '~> 3.1'

and run pod install

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

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.

ยฉ 2026 GitRepoTrend ยท sgr-ksmt/PDFGenerator ยท Updated daily from GitHub