【问题标题】:UIPrintPageRenderer is different size on iPadUIPrintPageRenderer 在 iPad 上的大小不同
【发布时间】:2020-08-02 02:08:21
【问题描述】:

我正在使用 WKWebView 中的 viewPrintFormatter() 打印一些 HTML。

我有一个CustomPrintPageRenderer,它是UIPrintPageRenderer 的子类,它将paperRectprintableRect 设置为595.2x841.8footer 为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 页。

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

我能做些什么来解决这个问题?

这可能是 Apple 的错误吗?

【问题讨论】:

    标签: ios swift pdf printing uiprintpagerenderer


    【解决方案1】:

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

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

    需要对矩形值使用变量(并在上面的 if 函数中编辑它们)而不是直接数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 2012-01-05
      • 2015-10-29
      相关资源
      最近更新 更多