0

我正在使用viewPrintFormatter()from aWKWebView打印一些 HTML。

我有一个CustomPrintPageRendererwhich 是一个子类,UIPrintPageRenderer它设置它的paperRectprintableRect595.2x841.8footer50。

我调用此代码从以下代码生成 PDF WKWebView

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 页。

当 WKWebView 实际上没有使用任何框架因为它没有显示在屏幕上时,为什么这在 iPad 和 iPhone 上会有所不同。似乎 iPad 可能在其计算中忽略了页脚。

我能做些什么来解决这种行为?

会不会是苹果的bug?

4

1 回答 1

0

同意,我不知道为什么这在 iPad 上和在 iPhone 上会有什么不同。如果您正在寻找快速解决方法,可以尝试检测设备是否是 iPad,然后相应地调整矩形:

if UIDevice.current.userInterfaceIdiom == .pad {
    /*put your adjusting code here*/
}

将需要使用 rect 值的变量(并在上面的 if 函数中编辑它们)而不是直数。

于 2020-04-19T18:30:10.283 回答