Конвертировать SwiftUI View в PDF на iOS - PullRequest
0 голосов
/ 19 марта 2020

Я рисовал несколько хороших графиков с SwiftUI, потому что это так просто и легко сделать. Затем я хотел экспортировать весь SwiftUI View в PDF-файл, чтобы кто-то еще мог просматривать графики хорошим способом. SwiftUI не предлагает решения для этого напрямую.

Приветствия,
Алекс

1 Ответ

1 голос
/ 19 марта 2020

Подумав, я пришел к мысли объединить метод UIKit в PDF и SwiftUI.

Сначала вы создаете представление SwiftUI, а затем помещаете его в UIHostingController. Вы отображаете HostingController в окне позади всех других представлений и рисуете его слой в PDF. Пример кода приведен ниже.

func exportToPDF() {

    let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let outputFileURL = documentDirectory.appendingPathComponent("SwiftUI.pdf")

    //Normal with
    let width: CGFloat = 8.5 * 72.0
    //Estimate the height of your view
    let height: CGFloat = 1000
    let charts = ChartsView()

    let pdfVC = UIHostingController(rootView: charts)
    pdfVC.view.frame = CGRect(x: 0, y: 0, width: width, height: height)

    //Render the view behind all other views
    let rootVC = UIApplication.shared.windows.first?.rootViewController
    rootVC?.addChild(pdfVC)
    rootVC?.view.insertSubview(pdfVC.view, at: 0)

    //Render the PDF
    let pdfRenderer = UIGraphicsPDFRenderer(bounds: CGRect(x: 0, y: 0, width: 8.5 * 72.0, height: height))

    do {
        try pdfRenderer.writePDF(to: outputFileURL, withActions: { (context) in
            context.beginPage()
            pdfVC.view.layer.render(in: context.cgContext)
        })

        self.exportURL = outputFileURL
        self.showExportSheet = true

    }catch {
        self.showError = true
        print("Could not create PDF file: \(error)")
    }

    pdfVC.removeFromParent()
    pdfVC.view.removeFromSuperview()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...