web-dev-qa-db-ja.com

PDFプログラムで文書を作成して保存するSwift

PDFを表示できるアプリがあります。新しいPDFドキュメントを作成して保存できるようにしたい既存のビューアで後で表示するアプリディレクトリ。PDFは、UITableViewに表示される配列var todoList: [String] = []から作成されます。 PDF、ファイル名、パス、およびディレクトリを作成する必要があります。これを行う方法がわかりません。URLへのオンライン参照とURLリクエストを見ましたが、これが正しい方法であるかどうかわかりません私がやりたいのですが、誰かが私にアドバイスやガイダンスを教えてもらえますか?私が見つけることができるものはすべてObjective-C用です。

9
ChallengerGuy

このコードを使用してファイルを作成および保存しました(HTMLを使用)

func createPDF() {
    let html = "<b>Hello <i>World!</i></b> <p>Generate PDF file from HTML in Swift</p>"
    let fmt = UIMarkupTextPrintFormatter(markupText: html)

    // 2. Assign print formatter to UIPrintPageRenderer

    let render = UIPrintPageRenderer()
    render.addPrintFormatter(fmt, startingAtPageAt: 0)

    // 3. Assign paperRect and printableRect

    let page = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4, 72 dpi
    let printable = page.insetBy(dx: 0, dy: 0)

    render.setValue(NSValue(cgRect: page), forKey: "paperRect")
    render.setValue(NSValue(cgRect: printable), forKey: "printableRect")

    // 4. Create PDF context and draw

    let pdfData = NSMutableData()
    UIGraphicsBeginPDFContextToData(pdfData, .zero, nil)

    for i in 1...render.numberOfPages {
        UIGraphicsBeginPDFPage();
        let bounds = UIGraphicsGetPDFContextBounds()
        render.drawPage(at: i - 1, in: bounds)
    }

    UIGraphicsEndPDFContext();

    // 5. Save PDF file

    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

    pdfData.write(toFile: "\(documentsPath)/file.pdf", atomically: true)
}

次に、このコードを使用して、ドキュメントディレクトリからUIWebViewにロードしました。

func loadPDF(filename: String) {
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    let url = URL(fileURLWithPath: documentsPath, isDirectory: true).appendingPathComponent(filename).appendingPathExtension("pdf")
    let urlRequest = URLRequest(url: url)
    webView.loadRequest(urlRequest)
}
27
Danny Narváez

Swiftの場合:

createPdf() {
    // 1. Create Print Formatter with input text.

    let formatter = UIMarkupTextPrintFormatter(markupText: textView.text)

    // 2. Add formatter with pageRender

    let render = UIPrintPageRenderer()
    render.addPrintFormatter(formatter, startingAtPageAt: 0)


    // 3. Assign paperRect and printableRect

    let page = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4, 72 dpi
    let printable = page.insetBy(dx: 0, dy: 0)

    render.setValue(NSValue(cgRect: page), forKey: "paperRect")
    render.setValue(NSValue(cgRect: printable), forKey: "printableRect")


    // 4. Create PDF context and draw
    let rect = CGRect.zero

    let pdfData = NSMutableData()
    UIGraphicsBeginPDFContextToData(pdfData, rect, nil)


    for i in 1...render.numberOfPages {

        UIGraphicsBeginPDFPage();
        let bounds = UIGraphicsGetPDFContextBounds()
        render.drawPage(at: i - 1, in: bounds)
    }

    UIGraphicsEndPDFContext();


    // 5. Save PDF file

    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

    pdfData.write(toFile: "\(documentsPath)/new.pdf", atomically: true)

    print("saved success")
}
4
Garry