PDFGenerator
PDFGenerator
是一个使用UIView
、UIImage
等生成的简单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 path
、image binary
、image ref (CGImage)
生成PDF。 - 良好的内存管理。
- UIScrollView支持:如果视图是
UIScrollView
、UITableView
、UICollectionView
、UIWebView
,则绘制整个内容。 - 以二进制(
Data
)输出或直接写入磁盘(给定的文件路径)。 - 与错误处理对应。PDF永远不会出现异常!!!
- 支持DPI。默认dpi是72。
- 支持密码保护。
要求
- iOS 8.0+
- Xcode 10+
- Swift 4.2
安装
Carthage
- 将以下内容添加到您的 Cartfile
github "sgr-ksmt/PDFGenerator" ~> 3.0
- 然后执行以下命令
$ carthage update
- 按照说明添加框架。
详细信息:请参阅 Carthage 仓库说明
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 文件了解更多信息。