SVG формата A4 не заполняет всю бумагу A4 при печати - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть программа, которая может выводить многоуровневую метку SVG, и я установил все единицы с помощью «мм», есть пример:

SVG(Container width="210mm" height="594mm")
  SVG(A4 size width="210mm" height="297mm")
    SVG(Label size width="105mm" height="99mm")
    SVG(Label size width="105mm" height="99mm")
    SVG(Label size width="105mm" height="99mm")
    SVG(Label size width="105mm" height="99mm")
    SVG(Label size width="105mm" height="99mm")
    SVG(Label size width="105mm" height="99mm")
  SVG(A4 size width="210mm" height="297mm")
    SVG(Label size width="105mm" height="99mm")
    SVG(Label size width="105mm" height="99mm")
    SVG(Label size width="105mm" height="99mm")
    SVG(Label size width="105mm" height="99mm")
    SVG(Label size width="105mm" height="99mm")
    SVG(Label size width="105mm" height="99mm")

У каждого SVG размера A4 будет небольшое отклонениена конце бумаги, поэтому, когда я распечатаю количество выше 3 бумаг, я увижу верхнюю часть paper3 на нижней части paper2.

Я попытался установить обводку прозрачной и ширину обводки равной 0, но похоже, что это непроблема с инсультом.

Вот полный код SVG

<?xml version="1.0" standalone="no"?>
<svg width="210mm" height="2673mm" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <svg x="0mm" y="0mm" width="210mm" height="297mm">
        <svg x="0mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
    </svg>
    <svg x="0mm" y="297mm" width="210mm" height="297mm">
        <svg x="0mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
    </svg>
    <svg x="0mm" y="594mm" width="210mm" height="297mm">
        <svg x="0mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
    </svg>
    <svg x="0mm" y="891mm" width="210mm" height="297mm">
        <svg x="0mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
    </svg>
    <svg x="0mm" y="1188mm" width="210mm" height="297mm">
        <svg x="0mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
    </svg>
    <svg x="0mm" y="1485mm" width="210mm" height="297mm">
        <svg x="0mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
    </svg>
    <svg x="0mm" y="1782mm" width="210mm" height="297mm">
        <svg x="0mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
    </svg>
    <svg x="0mm" y="2079mm" width="210mm" height="297mm">
        <svg x="0mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
    </svg>
    <svg x="0mm" y="2376mm" width="210mm" height="297mm">
        <svg x="0mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="0mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="105mm" y="99mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#FF0000" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
        <svg x="0mm" y="198mm" width="105mm" height="99mm">
            <rect stroke="#fff" fill="#00FF00" stroke-width="0" x="0%" y="0%" width="100%" height="100%" />
        </svg>
    </svg>
</svg>

Вот предварительный просмотр печати в Chrome print preview

А вот SVG-файл

1 Ответ

0 голосов
/ 24 апреля 2019

Единицы координат «реального мира», такие как mm, не соответствуют фактическим измерениям реального мира.

Для простоты, SVG (на самом деле это вещь CSS), определяет дюйм как 96Пиксели CSS (px).Это примерно соответствовало приблизительному разрешению экрана назад, когда это было решено.В действительности, 1in - это просто сокращение для 96px.

. Как браузер решает, что 96px соответствует при печати, зависит от них.И никто из них (AFAIK) не предпринимает никаких попыток сопоставить CSS «DPI» и DPI принтера.

Вам нужно будет вручную отрегулировать масштаб SVG-файлов на соответствующую величину для вашего браузера икомбинация принтеров.

Этот предыдущий вопрос может быть полезен с этим: SVG для печати со шкалой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...