Распечатайте страницу с цветом фона, начиная с края PDF-документа

Я хотел бы, чтобы серо-синее поле было выровнено по краю PDF-файла, созданного Google Chrome через диалоговое окно печати.

  • @page — это size: letter portrait или 8,5 дюймов (ширина) x 11 дюймов (высота)
  • left-sidebar — это height: 11in с синим фоном
  • intro — это height: 2in на сером фоне

Почему это не работает? Можно ли предотвратить появление белого фона вверху/слева/низу left-sidebar div?

Код

<html>
<head>
    <meta charset = "UTF-8">
    <style>
        /* Printing */
        * {
            /* Force background graphic printing */
            -webkit-print-color-adjust: exact !important;   /* Chrome, Safari 6 – 15.3, Edge */
            color-adjust: exact !important;                 /* Firefox 48 – 96 */
            print-color-adjust: exact !important;           /* Firefox 97+, Safari 15.4+ */
        }
        @page {
            size: letter portrait;
            margin: 0;
        }
        @media print {
            body {
                visibility: hidden;
            }
            .page {
                visibility: visible;
                padding: 0;
                margin: 0;
            }
        }

        /* Browser */
        @media screen {
            body {
                background: #e0e0e0;
            }
            .page {
                background: white;
                box-shadow: 0 .5mm 2mm rgba(0,0,0,.3);
                margin: 2rem auto;
            }
        }

        /* Paging */
        *, *:before, *:after {
            -webkit-box-sizing: border-box;
            -moz-box-sizing: border-box;
            box-sizing: border-box;
        }
        .page {
            width: 8.5in;
            height: 11in;
        }
        .page-content {
            position: absolute;
            display: flex;
        }

        /* Page Layout */
        .left-sidebar {
            flex-grow: 0;
            flex-shrink: 0;
            width: 3in;
            height: 11in !important;
            margin: 0;
            padding: 0;
            background-color: #284877;
            color: white;
        }
        .right-sidebar {
            margin: 0;
            padding: 0;
            background-color: white;
            color: black;
        }
        .intro {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 2in;
            background-color: #d2d2d2;
        }

        /* Text */
        .title {
            font-weight: 800;
            color: #284877;
            font-size: 24pt;
        }
        .section {
            padding: 0.5rem 0.75rem 0;
        }
    </style>
</head>

<body>
    <div class = "page">
        <div class = "page-content">
            <div class = "left-sidebar">
                <div class = "intro">
                    <div class = "title">
                        Document Name
                    </div>
                </div>

                <div class = "section">
                    <p>Lorem ipsum 1...</p>
                </div>
            </div>

            <div class = "right-sidebar">
                <p>Lorem ipsum 2...</p>
            </div>
        </div>
    </div>
</body>

Живая демонстрация: https://ajility.dev/stack-overflow/print-with-bleed/

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть большая часть правильного HTML-кода для нужной страницы, но немного неправильный порядок команд. Страницы PDF не имеют полей, поэтому тело страницы /MediaBox и /BleedBox должно быть одинакового размера, без границ, полей, отступов или теневого поля.

Вот временная ссылка на результат изменения одной-двух строк. https://filetransfer.io/data-package/L6EUUb1S#link

Вот вид.

Вот начало медиа-страницы <style> для этого результата.

<style>
        /* Printing */
        * {
            /* Force background graphic printing */
            -webkit-print-color-adjust: exact !important;   /* Chrome, Safari 6 – 15.3, Edge */
            color-adjust: exact !important;                 /* Firefox 48 – 96 */
            print-color-adjust: exact !important;           /* Firefox 97+, Safari 15.4+ */
        }
        @media print { @ page {size: letter; margin: 0;}
            body {
                visibility: hidden; margin: 0;
            }
            .page {
                visibility: visible;
                padding: 0;
                margin: 0;
            }
        }

Это гарантирует наличие только одной границы (/MediaBox [ 0 0 612 792 ]) для страницы PDF.

<<
  /Type /Page
  /Resources <</ExtGState <</G3 3 0 R/G4 4 0 R>>/Font <</F5 5 0 R>> >>
  /MediaBox [ 0 0 612 792 ]
  /Contents 6 0 R
  /StructParents 0
  /Parent 7 0 R
>>

Вы потрясающие - спасибо! Могу ли я узнать, как называется второй блок кода в вашем ответе (/MediaBox...)? Я никогда не видел этого раньше.

Ajility 07.08.2024 04:25

@Ajility, это PDF-файл при запуске в программе просмотра, он похож, но не идентичен тому, как работает PostScripting. Итак, это описание типа PDF/страницы для того, как эта одна страница должна быть структурирована с содержимым в этом случае, будет определено в объект 6, но эта страница является дочерним объектом /Parent 7. Мы говорим, что PDF-файл создается случайным образом, поскольку объекты не хранятся в обычном человеческом порядке, поэтому страница 2 может быть до страницы 20 или до 1 и т. д. PDF-файл не является страницами текста. а абзацы — это просто двоичные числа, которые можно читать, как обычный текст.

K J 07.08.2024 04:32

Другие вопросы по теме