先日ライブラリとして公開したPDFGeneratorを、1.0.0にアップデートしました。
以前のバージョンまででは、viewならviewのみ、viewならviewのみでしかPDFを生成できませんでしたが、
たとえば、
[view, image, image, view]
のように、viewとimageを混ぜて生成出来るようになりました。
func generatePDF() {
let v1 = UIView(frame: CGRectMake(0,0,100,100))
v1.backgroundColor = UIColor.redColor()
let v2 = UIView(frame: CGRectMake(0,0,100,200))
v2.backgroundColor = UIColor.greenColor()
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 = NSHomeDirectory().stringByAppendingString("/sample1.pdf")
do {
try PDFGenerator.generate(pages, outputPath: dst)
} catch (let e) {
print(e)
}
}
もちろん、従来通りの使い方もできます。
また、今までエラーが起こりうる現象に対して、空のPDFを作るという対処をしていましたが、今回のバージョンからは、
空のPDFを作るのではなく、エラーが発生する場合は、エラーを返すようにしました。
エラーは以下のように定義しています。
public enum PDFGenerateError: ErrorType {
case ZeroSizeView(UIView) // width,heightのいずれかが0pxのとき
case ImageLoadFailed(String) // imageのpathを渡した時、UIImageが生成できなかったとき
case EmptyOutputPath // generateに渡すoutputPathが空文字の場合
case EmptyPage // `PDFGenerator.generate([])` みたいに空のpagesを渡した時
}
それに伴い、全部の関数にthrows属性が付与されたので、必要に応じてError Handlingをする必要があります。
ひとまず、必要な機能や、エラーを考慮した設計ができたので、これで一段落です。
追記 (2016/02/12 00:45)
ダメ元でAwesome Swift の Utilityの項目ににプルリクを出してみたら、承認されたので、無事一つの目標は達成できました!
まだまだstarも少ないし、この先swift2.2なり3.0なりがでたときに積極的なコミット、改善が必要ですが、頑張ります..!