提问人:Marc Polizzi 提问时间:11/9/2023 最后编辑:Marc Polizzi 更新时间:11/18/2023 访问量:146
CSS transform:scale() 和打印到 PDF 损坏
CSS transform:scale() and print to PDF broken
问:
我正在使用 Chrome 生成 PDF :一切正常,直到其中一些包含以下用于缩小其内容的 CSS 转换:divs
transform-origin: 0px 0px;
transform: scale(0.5);
此处提供了损坏页面的示例,完整代码可在本文末尾找到。
本示例创建两个页面;每页包含两个并排的页面,覆盖了每个页面的整个高度。使用 CSS 转换按比例缩小右侧的内容。在浏览器中一切看起来都不错。但是,在打印页面时(通过 Chrome 无头或通过浏览器打印功能),第一页上按比例缩小的高度是错误的(其内容已正确缩小)。Letter
divs
Letter
div
div
<html lang="en">
<head>
<style>
@page {
margin: 0;
padding: 0;
size: Letter portrait;
}
body {
overflow: auto;
position: relative;
margin: 0;
padding: 0;
border: 0;
display: flex;
flex-direction: column;
}
.page {
overflow: hidden;
position: relative;
width: 8.5in;
height: 11in;
break-after: page;
}
.widget {
position: absolute;
left: 0px;
top: 0px;
width: calc(8.5in / 2);
height: 11in;
}
.widgetScaled {
opacity: 0.6;
position: absolute;
left: calc(8.5in / 2);
top: 0px;
width: calc(8.5in * 2);
height: calc(11in * 2);
transform-origin: 0px 0px;
transform: scale(0.5);
}
.title {
font-size: 96px;
}
</style>
</head>
<body>
<div class="page">
<div class="widget" style="background-color: beige;">
<span class="title">1</span>
</div>
<div class="widgetScaled" style="background-color: beige">
<span class="title">1scaled</span>
</div>
</div>
<div class="page">
<div class="widget" style="background-color: lightblue;">
<span class="title">2</span>
</div>
<div class="widgetScaled" style="background-color: lightblue;">
<span class="title">2scaled</span>
</div>
</div>
</body>
</html>
编辑:该问题仅发生在所有页面上,但最后一个页面除外,并且似乎仅与scaleY有关(scaleX似乎工作正常)。
答:
0赞
Muzamil Khan
11/9/2023
#1
将位置从“widgetScaled”类更改为相对位置将解决此问题。
<html lang="en">
<head>
<style>
@page {
margin: 0;
padding: 0;
size: Letter portrait;
}
body {
overflow: auto;
position: relative;
margin: 0;
padding: 0;
border: 0;
display: flex;
flex-direction: column;
}
.page {
overflow: hidden;
position: relative;
width: 8.5in;
height: 11in;
break-after: page;
}
.widget {
position: absolute;
left: 0px;
top: 0px;
width: calc(8.5in / 2);
height: 11in;
}
.widgetScaled {
opacity: 0.6;
position: relative;
left: calc(8.5in / 2);
top: 0px;
width: calc(8.5in * 2);
height: calc(11in * 2);
transform-origin: 0px 0px;
transform: scale(0.5);
}
.title {
font-size: 96px;
}
</style>
</head>
<body>
<div class="page">
<div class="widget" style="background-color: beige">
<span class="title">1</span>
</div>
<div class="widgetScaled" style="background-color: beige">
<span class="title">1scaled</span>
</div>
</div>
<div class="page">
<div class="widget" style="background-color: lightblue">
<span class="title">2</span>
</div>
<div class="widgetScaled" style="background-color: lightblue">
<span class="title">2scaled</span>
</div>
</div>
<div class="page">
<div class="widget" style="background-color: beige">
<span class="title">1</span>
</div>
<div class="widgetScaled" style="background-color: beige">
<span class="title">1scaled</span>
</div>
</div>
</body>
</html>
评论
0赞
Marc Polizzi
11/9/2023
不幸的是,小部件不能“相对”定位。
0赞
Marc Polizzi
11/18/2023
#2
根据 https://bugs.chromium.org/p/chromium/issues/detail?id=1501807 中提到的建议,以下方法解决了该问题:
.page {
contain: size;
}
评论