ライブラリ「PDFGenerator」をアップデートしました

Thursday, February 11, 2016

先日ライブラリとして公開した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なりがでたときに積極的なコミット、改善が必要ですが、頑張ります..!

techSwiftiOSGithub

OSSとコミット

autoreleasepoolから例外を投げられるようにする