我正在使用WKWebView
中的viewPrintFormatter()
来打印一些HTML。
我有一个CustomPrintPageRenderer
,它是UIPrintPageRenderer
的子类,它将它的paperRect
和printableRect
设置为595.2
x841.8
和footer
设置为50。
我调用此代码从WKWebView
:生成PDF
private func createPDF(_ formatter: UIViewPrintFormatter) {
// Our custom print renderer sets it's size and footer automatically
let render = CustomPrintPageRenderer.init()
render.addPrintFormatter(formatter, startingAtPageAt: 0)
// Create PDF context and draw
let pdfData = NSMutableData()
let rect = CGRect.init(x: 0, y: 0, width: 595.2, height: 841.8)
UIGraphicsBeginPDFContextToData(pdfData, rect, nil)
for i in 0..<render.numberOfPages {
UIGraphicsBeginPDFPage();
render.drawPage(at: i, in: UIGraphicsGetPDFContextBounds())
}
UIGraphicsEndPDFContext();
self.completion?(.success(pdfData as Data))
}
这一切在iPhone
模拟器上运行得很好,但当我在iPad
模拟器上使用它时(特别是,我正在测试iPad Pro 11英寸第二代(,生成的PDF会爬到第二页。
将页面底部的1行文本移到第2页上。
为什么在iPad和iPhone上会有所不同,因为WKWebView实际上没有使用任何框架,因为它没有显示在屏幕上。看起来iPad可能忽略了计算中的页脚。
我能做些什么来纠正这种行为?
这可能是苹果的错误吗?
同意,我不知道为什么iPad和iPhone会有什么不同。如果你正在寻找一个快速的解决方法,也许可以尝试检测设备是否是iPad,然后相应地调整矩形:
if UIDevice.current.userInterfaceIdiom == .pad {
/*put your adjusting code here*/
}
将需要为rect值使用变量(并在上面的if函数中编辑它们(,而不是使用正数。