Установите поля для печати html и pdf в Android с помощью webView из webkit - PullRequest
1 голос
/ 30 октября 2019

У меня есть приложение для Android, которое отображает HTML в PDF с помощью Android (Kotlin) webView из webkit и PrintDocumentAdapter. Поля для печати задаются с помощью @-страницы следующим образом:

@page {
    size: A4 portrait;
    margin: 20mm 15mm 20mm 15mm;
}

@media screen, print {
    html, body {
        width: 210mm;
        height: 294mm;
    }

    page {
        box-shadow: 0;
        display: block;
    }

}

Я добавил с AND-высотой из-за следующей ссылки Кажется, что Chrome неправильно вычисляет размеры CSS, указанные в единицах мм при печати ,Но отсутствие ширины здесь не проблема. До недавнего обновления Chrome для Android (78.0.3904.62) сгенерированный html действительно отображался с желаемыми полями в формате PDF формата A4. При использовании следующих атрибутов PrintAttributes в Kotlin:

var attributes : PrintAttributes = PrintAttributes.Builder()
                .setMediaSize(PrintAttributes.MediaSize.ISO_A4)
                .setResolution(PrintAttributes.Resolution("pdf", "pdf", 150, 150))
                .setMinMargins(PrintAttributes.Margins.NO_MARGINS).build()

Но после обновления Chrome наше приложение создает PDF-файлы с полями по 8 см со всех четырех сторон. Я мог бы решить проблему, используя px вместо mm. Но это не похоже на правильное решение. Это html / css, который работает на данный момент:

@page {
    size: A4 portrait;
    margin: 22px 20px 23px 21px;
}

@media screen, print {
    html, body {
        width: 210mm;
        height: 294mm;
    }

    page {
        box-shadow: 0;
        display: block;
    }

}

Это ошибка в Chrome для Android или я что-то упустил здесь важное?

...