我在Swift 3.0中根据html内容创建了pdf文件:
/** * */ func exportHtmlContentToPDF(HTMLContent: String, filePath: String) { // let webView = UIWebView(frame: CGRect(x: 0, y: 0, width: 694, height: 603)); // webView.loadHTMLString(HTMLContent, baseURL: nil); let pdfPrinter = PDFPrinter(); let printFormatter = UIMarkupTextPrintFormatter(markupText: HTMLContent); // let printFormatter = webView.viewPrintFormatter(); pdfPrinter.addPrintFormatter(printFormatter, startingAtPageAt: 0); let pdfData = self.drawPDFUsingPrintPageRenderer(printPageRenderer: pdfPrinter); pdfData?.write(toFile: filePath, atomically: true); } /** * */ func drawPDFUsingPrintPageRenderer(printPageRenderer: UIPrintPageRenderer) -> NSData! { let data = NSMutableData(); UIGraphicsBeginPDFContextToData(data, CGRect.zero, nil); printPageRenderer.prepare(forDrawingPages: NSMakeRange(0, printPageRenderer.numberOfPages)); let bounds = UIGraphicsGetPDFContextBounds(); for i in 0...(printPageRenderer.numberOfPages - 1) { UIGraphicsBeginPDFPage(); printPageRenderer.drawPage(at: i, in: bounds); } UIGraphicsEndPDFContext(); return data; }
除了我的base64编码图像外,其他所有内容都可以正常渲染。在Web视图中或在Safari或chrome浏览器中的HTML内容本身可以正确显示,并且可以正确显示所有图像。但是图像永远不会渲染到pdf中。
为什么不渲染图像?如何使它们渲染?
我找到了解决方案!
导出到PDF会在渲染过程完成之前进行。如果您放入很小的图片,它将显示在PDF中。如果图片太大,则渲染过程会花费太多时间,但是PDF导出不会等待渲染完成。
因此,我要做的就是以下几点:
在导出为PDF之前,我先在WebView中显示HTML的结果。WebView可以正确呈现所有内容,现在当我按导出到PDF时,PDF可以正确显示其中的所有图像。
因此,我认为这是一个巨大的滞后,无法告诉PDF导出器等待渲染过程完成。