Features | Requirements | Installation | Usage | Communication | LICENSE
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 3 is ready 👍
- 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 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:
- 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:
# 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. 🙇
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. 🙇
- Also, if you have a feature request, please open an issue. 👍
- If you want to contribute, submit a pull request.:muscle:
License
PDFGenerator is under MIT license. See the LICENSE file for more info.