Не удалось преобразовать HTML-код в PDF - PullRequest
0 голосов
/ 16 мая 2018

У меня есть шаблон HTML. Я хочу преобразовать его в PDF и поделиться.

Когда я делаю что-то вроде этого ...

let activityViewController:UIActivityViewController = UIActivityViewController(activityItems:  [self.appDelegate.HTMLContent], applicationActivities: nil)

self.present(activityViewController, animated: true, completion: nil)

Тогда то, что является общим, это всего лишь HTML-код. Я хотел преобразовать HTML-код в PDF, а затем поделиться им. Что мне делать для этого ...?

1 Ответ

0 голосов
/ 16 мая 2018

Используйте следующий метод для преобразования вашей HTML-строки в формат данных PDF формата A4:

func generatePDF(from html: String) -> NSData {

    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 printableRect = CGRect(x: 47.6, y: 70.9, width: 500, height: 700) // Adding margin to page
    render.setValue(page, forKey: "paperRect")
    render.setValue(printableRect, forKey: "printableRect")

    // 4. Create PDF context and draw
    let pdfData = NSMutableData()
    UIGraphicsBeginPDFContextToData(pdfData, .zero, nil)

    for i in 0..<render.numberOfPages {
        UIGraphicsBeginPDFPage()
        render.drawPage(at: i, in: UIGraphicsGetPDFContextBounds())
    }

    UIGraphicsEndPDFContext()

    return pdfData
}

Теперь используйте следующий код, чтобы поделиться им:

let pdfData = generatePDF(from: self.appDelegate.HTMLContent)
let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: [pdfData], applicationActivities: nil)

self.present(activityViewController, animated: true, completion: nil)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...