我正在尝试将当前的WKWebView视图另存为PDF。这是加载到webview中的HTML:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>PDF neve</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
border: 1px solid red;
}
div {
height: 400px;
}
</style>
</head>
<body>
<div>lorem</div>
</body>
</html>
正确渲染后,身体的边框从一侧移到另一侧:
但是,当我使用以下代码从此WebView生成PDF时:
class func generate() -> Data {
// assign the print formatter to the print page renderer
let renderer = UIPrintPageRenderer()
let printFormatter = wkWebView.viewPrintFormatter()
renderer.addPrintFormatter(printFormatter, startingAtPageAt: 0)
// assign paperRect and printableRect values
let page = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4, 72 dpi
renderer.setValue(page, forKey: "paperRect")
renderer.setValue(page, forKey: "printableRect")
// create pdf context and draw each page
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, .zero, nil)
for i in 0..<renderer.numberOfPages {
UIGraphicsBeginPDFPage()
renderer.drawPage(at: i, in: UIGraphicsGetPDFContextBounds())
}
UIGraphicsEndPDFContext();
// save data to a pdf file and return
guard nil != (try? pdfData.write(to: outputURL, options: .atomic))
else { fatalError("Error writing PDF data to file.") }
return pdfData as Data
}
我得到这个结果:
请注意,右侧存在边框/间距问题。有什么想法可能导致这种情况吗?