UIPrintPageRenderer отличается размером на iPad - PullRequest
0 голосов
/ 19 апреля 2020

Я использую viewPrintFormatter() из WKWebView для печати некоторых HTML.

У меня есть CustomPrintPageRenderer, который является подклассом UIPrintPageRenderer, который устанавливает paperRect и printableRect до 595.2 x 841.8 и footer до 50.

Я называю этот код для генерации 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-дюймовый 2-го поколения), сгенерированный PDF переходит на 2-ю страницу.

1 строка текст из нижней части страницы перемещается на страницу 2.

Почему это будет отличаться на iPad от iPhone, когда WKWebView фактически не использует ни одного фрейма, поскольку он не отображается на экране. Кажется, что iPad может игнорировать нижний колонтитул в своих вычислениях.

Что я могу сделать, чтобы исправить это поведение?

Может ли это быть ошибка Apple?

1 Ответ

0 голосов
/ 19 апреля 2020

Согласен, я не уверен, почему на iPad все будет иначе, чем на iPhone. Если вы ищете быстрый обходной путь, возможно, попробуйте определить, является ли устройство iPad, а затем соответствующим образом скорректировать прямоугольник:

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

Потребуется использовать переменные для значений прямоугольника (и отредактировать их в случае, если функция выше), а не прямые числа.

...