PDF экспорт катализатора UIview xcode - PullRequest
0 голосов
/ 05 апреля 2020

Попытка экспортировать PDF-файл текущего представления в приложение xcode катализатор ma c. Загрузка HTML в поле зрения, и она отображается, как ожидалось, но пустая в экспортированном PDF? Пробовал несколько разных методов, включая печать, но всегда остается пустым. Это как-то связано с добавлением его в качестве дополнительного представления?

let HTMLContent = "123"
let webView = WKWebView(frame: view.frame)
webView.loadHTMLString(HTMLContent, baseURL: nil)
    view.addSubview(webView)

let pdfFilePath = webView.exportAsPdfFromWebView()
    print(pdfFilePath)

extension WKWebView {
// Call this function when WKWebView finish loading
func exportAsPdfFromWebView() -> String {
    let pdfData = createPdfFile(printFormatter: self.viewPrintFormatter())
    return self.saveWebViewPdf(data: pdfData)
}

func createPdfFile(printFormatter: UIViewPrintFormatter) -> NSMutableData {

    let originalBounds = self.bounds
    self.bounds = CGRect(x: originalBounds.origin.x, y: bounds.origin.y, width: self.bounds.size.width, height: self.scrollView.contentSize.height)
    let pdfPageFrame = CGRect(x: 0, y: 0, width: self.bounds.size.width, height: self.scrollView.contentSize.height)
    let printPageRenderer = UIPrintPageRenderer()
    printPageRenderer.addPrintFormatter(printFormatter, startingAtPageAt: 0)
    printPageRenderer.setValue(NSValue(cgRect: UIScreen.main.bounds), forKey: "paperRect")
    printPageRenderer.setValue(NSValue(cgRect: pdfPageFrame), forKey: "printableRect")
    self.bounds = originalBounds
    return printPageRenderer.generatePdfData()
}

// Save pdf file in document directory
func saveWebViewPdf(data: NSMutableData) -> String {

    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    let docDirectoryPath = paths[0]
    let pdfPath = docDirectoryPath.appendingPathComponent("webViewPdf.pdf")
    if data.write(to: pdfPath, atomically: true) {
        return pdfPath.path
    } else {
        return ""
    }
}

}

...