2016-09-29 160 views
1

我正在從圖像的HTML文件創建PDF。我嘗試通過從Html以及從UIWebView通過將HTML加載到Web視圖創建。以下是使用方法兩種方法PDF從Html使用UIViewPrintFormatter創建不顯示本地圖像

1.從HTML

func exportHTMLContentToPDF(HTMLContent: String) { 
    let printPageRenderer = CustomPrintPageRenderer() 

    let printFormatter = UIMarkupTextPrintFormatter(markupText: HTMLContent) 
    printPageRenderer.addPrintFormatter(printFormatter, startingAtPageAtIndex: 0) 

    let pdfData = drawPDFUsingPrintPageRenderer(printPageRenderer) 

    pdfData.writeToFile(pdfPath(), atomically: true) 

} 

2.從一個UIWebView通過加載HTML

func createPdfFromViewFormatter(viewFormatter:UIViewPrintFormatter) { 

    let printPageRenderer = CustomPrintPageRenderer() 

    printPageRenderer.addPrintFormatter(viewFormatter, startingAtPageAtIndex: 0) 
    let pdfData = drawPDFUsingPrintPageRenderer(printPageRenderer) 

    pdfData.writeToFile(pdfPath(), atomically: true) 


} 

PDF創建method`

private func drawPDFUsingPrintPageRenderer(printPageRenderer: UIPrintPageRenderer) -> NSData! { 
    let data = NSMutableData() 

    UIGraphicsBeginPDFContextToData(data, CGRect(x: 0.0, y: 0.0, width: printPageRenderer.printableRect.width, height: printPageRenderer.printableRect.height), nil) 


    printPageRenderer.prepareForDrawingPages(NSRange(location: 0, length:printPageRenderer.numberOfPages())) 


    for i in 0..<printPageRenderer.numberOfPages() { 


     UIGraphicsBeginPDFPage() 

     printPageRenderer.drawPageAtIndex(i, inRect: UIGraphicsGetPDFContextBounds()) 

    } 

    UIGraphicsEndPDFContext() 


    return data 
} 

問題是html中的圖像未在創建的pdf中顯示,而是在將其加載到UIWebView中時顯示。

回答

0

我有同樣的問題: IOS Swift sharing PDF documents with images 我相信這是一個錯誤。我目前找到的唯一解決方案是創建一個我隱藏的虛擬UIWebView。我在UIWebView中加載HTML,然後創建PDF。這裏是我的代碼:

override func viewDidLoad() { 
    super.viewDidLoad() 

    hiddenWebView.loadHTMLString(htmlText, baseURL: nil) 
    hiddenWebView.isHidden = true 
} 

override func viewDidAppear(_ animated: Bool) { 
    pdfDocument = getPdf() 
    let tmpDirectoryURL = URL(fileURLWithPath: NSTemporaryDirectory()) 
    let fileURL = tmpDirectoryURL.appendingPathComponent("document.pdf") 
    pdfDocument.write(to: fileURL, atomically: false) 
    documentWebView.loadRequest(URLRequest(url: fileURL)) 
} 

我希望它有幫助。