@page size css规则的奇怪行为

问题描述 投票:0回答:1

我在使用 @page 规则以及使用 MS Edge 和 Google Chrome 的“另存为 PDF”打印功能时遇到一些问题。这是我的问题:

背景

我有一个 SVG 文件,正在尝试使用浏览器将其转换为 PDF(由于某种原因,我无法使用 svg2pdf 或 cairosvg 等库)。因此,我在浏览器中打开文件并尝试打印它(即使用选项“另存为 PDF”)。由于页面尺寸不是 A4,我使用 @page size css 属性指定页面尺寸。然而,即使在将 SVG 的确切长度指定为页面大小并将页边距设置为 0 后,PDF 中仍然有两页。

奇怪的行为

如果我增加 svg 标签的宽度或高度属性,并让 @page 大小保持原始尺寸,我就可以使用“另存为 PDF”选项,其中 PDF 仅具有单页。我无法理解这种行为。我不知道这是浏览器的错误还是这种行为是正确的行为,并且我对@page 规则的理解不正确。

示例

2页

<!DOCTYPE html>
<html>
<head>
    <style>
        @page {
            margin: 0px;
            size: 1152px 1599.84px;
        }
    </style>
</head>
<body>
<svg width='1152' height='1599.84' xmlns='http://www.w3.org/2000/svg'><text fill="green" stroke="None" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-dasharray="none" stroke-dashoffset="0" stroke-miterlimit="4" transform="translate(876.02, 1207.8899999999999) scale(1, 1) skewX(0) skewY(0)" fill-rule="nonzero" paint-first="fill" font-size="60" font-weight="normal" font-family="Segoe UI Symbol" font-style="normal" line-height="1.16" text-align="left">✓</text></svg>
</body>
</html>

1 页

<!DOCTYPE html>
<html>
<head>
    <style>
        @page {
            margin: 0px;
            size: 1152px 1599.84px;
        }
    </style>
</head>
<body>
<svg width='1160' height='1599.84' xmlns='http://www.w3.org/2000/svg'><text fill="green" stroke="None" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-dasharray="none" stroke-dashoffset="0" stroke-miterlimit="4" transform="translate(876.02, 1207.8899999999999) scale(1, 1) skewX(0) skewY(0)" fill-rule="nonzero" paint-first="fill" font-size="60" font-weight="normal" font-family="Segoe UI Symbol" font-style="normal" line-height="1.16" text-align="left">✓</text></svg>
</body>
</html>
css google-chrome microsoft-edge chromium
1个回答
0
投票

我做了一些测试,看起来 Chromium 中的页面大小小数点被截断了。我认为这种行为是设计使然的。实际上页面大小等于

size: 1152px 1599px
,所以当svg高度为1599.84时你会得到两页。您还可以参考这个类似的帖子:Are the Decimal days in a CSS widthspected?.

之所以增加svg的宽度或高度才能打印一页,是因为页面尺寸比svg小,打印时svg会缩小。

如果要打印一页,可以将页面大小设置为1600px,并使svg的宽度和高度保持不变:

@page {
       margin: 0px;
       size: 1152px 1600px;
      }
© www.soinside.com 2019 - 2024. All rights reserved.