一尘不染

UIMarkupTextPrintFormatter永远不会渲染base64图像

swift

我在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中。

为什么不渲染图像?如何使它们渲染?


阅读 297

收藏
2020-07-07

共1个答案

一尘不染

我找到了解决方案!

导出到PDF会在渲染过程完成之前进行。如果您放入很小的图片,它将显示在PDF中。如果图片太大,则渲染过程会花费太多时间,但是PDF导出不会等待渲染完成。

因此,我要做的就是以下几点:

在导出为PDF之前,我先在WebView中显示HTML的结果。WebView可以正确呈现所有内容,现在当我按导出到PDF时,PDF可以正确显示其中的所有图像。

因此,我认为这是一个巨大的滞后,无法告诉PDF导出器等待渲染过程完成。

2020-07-07