У меня есть приложение для 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 или я что-то упустил здесь важное?