打印html页面时的保证金

kob*_*bra 128 html css printing stylesheet

我正在使用单独的样式表进行打印.是否可以在样式表中设置右边距和左边距,以设置打印边距(即纸张上的边距).

谢谢.

awe*_*awe 226

指定打印时,应使用cmmm作为单位.使用像素将导致浏览器将其转换为类似于屏幕上的内容.使用cmmm将确保纸张尺​​寸一致.

body
{
  margin: 25mm 25mm 25mm 25mm;
}
Run Code Online (Sandbox Code Playgroud)

对于字体大小,请使用pt打印介质.

请注意,以css样式设置主体上的边距不会调整打印机驱动程序中定义打印机可打印区域的边距,也不会调整浏览器控制的边距(在某些浏览器的打印预览中可以调整)...只会在可打印区域内的文档上设置边距.

您还应该知道,IE7 ++会自动调整大小以使其最合适,并且即使您使用cm或,也会导致一切都出错mm.要覆盖此行为,用户必须选择"打印预览",然后将打印大小设置为100%(默认值为Shrink To Fit).

完全控制打印边距的更好选择是使用该@page指令设置纸张边距,这将影响html body元素外部的纸张边距,通常由浏览器控制.见http://www.w3.org/TR/1998/REC-CSS2-19980512/page.html.
这目前适用于除Safari之外的所有主流浏览器.
在Internet Explorer中,边距实际上在此打印的设置中设置为此值,如果您执行预览,则会将其设置为默认值,但用户可以在预览中更改它.

@page  
{ 
    size: auto;   /* auto is the initial value */ 

    /* this affects the margin in the printer settings */ 
    margin: 25mm 25mm 25mm 25mm;  
} 

body  
{ 
    /* this affects the margin on the content before sending to printer */ 
    margin: 0px;  
} 
Run Code Online (Sandbox Code Playgroud)

相关回答: 从页面禁用浏览器打印选项(页眉,页脚,页边距)?

  • @page为+1!这正是我所需要的,因为我正在打印多个页面. (7认同)
  • 这适用于Chrome 18和IE9(未测试早期版本).仍然没有在Firefox 12中工作,但你可以做一个服务器端检测并添加一个body类`<body class ="firefox">`所以在你的CSS中你可以做`body.firefox {margin:0mm; padding:0.25in;}`,实际上是0.75英寸的边距,因为firefox已经增加了0.5英寸.只要您需要> = 0.5英寸的边距,这应该可以工作. (3认同)
  • 它现在也适用于Firefox.由于Firefox具有良好的自动更新例程,因此这不应成为我们需要解决的问题.我已经在IE,Opera,Chrome,Firefox和Safari上进行了测试.目前唯一不能使用的浏览器是Safari(Windows版本5.1.7).我还没有在Mac上测试过. (2认同)
  • 请注意,Chrome 中的边距需要设置为默认值,@page 指令才能生效。 (2认同)

Kai*_*ack 29

首先说,我尝试强制所有用户在打印时使用Chrome,因为其他浏览器会创建不同的布局.

这个问题的答案建议:

@page {
  size: 210mm 297mm; 
  /* Chrome sets own margins, we change these printer settings */
  margin: 27mm 16mm 27mm 16mm; 
}
Run Code Online (Sandbox Code Playgroud)

但是,我最终使用这个CSS来打印所有页面:

@media print 
{
    @page {
      size: A4; /* DIN A4 standard, Europe */
      margin:0;
    }
    html, body {
        width: 210mm;
        /* height: 297mm; */
        height: 282mm;
        font-size: 11px;
        background: #FFF;
        overflow:visible;
    }
    body {
        padding-top:15mm;
    }
}
Run Code Online (Sandbox Code Playgroud)



特例:长桌

当我需要在几页上打印一张桌子的时候margin:0,这@page会导致出血边缘:

流血的边缘

我可以通过以下答案解决这个问题:

table { page-break-inside:auto }
tr    { page-break-inside:avoid; page-break-after:auto }
thead { display:table-header-group }
tfoot { display:table-footer-group }
Run Code Online (Sandbox Code Playgroud)

另外设置上下边距@page:

@page { 
    size: auto;
    margin: 20mm 0 10mm 0;
}
body {
    margin:0;
    padding:0;
}
Run Code Online (Sandbox Code Playgroud)

结果:

解决了出血边缘

我宁愿选择简洁且适用于所有浏览器的解决方案.目前,我希望上面的信息可以帮助一些开发人员遇到类似的问题.

  • 在使用 ERPNext 打印报告时,您的解决方案被证明是无价的。我能够轻松地开发自己的自定义打印格式,这些指针非常有帮助! (3认同)

Dav*_*mas 9

我个人建议使用不同的测量单位px.我不认为像素在印刷方面有很大的相关性; 理想情况下你会使用:

  • 点(pt)
  • 厘米(cm)

我确定还有其他人,有关print-css的一篇优秀文章可以在这里找到:由Eric Meyer 去打印.


Pir*_*dul 9

更新,简单的解决方案

@media print {
   body {
       display: table;
       table-layout: fixed;
       padding-top: 2.5cm;
       padding-bottom: 2.5cm;
       height: auto;
   }
}
Run Code Online (Sandbox Code Playgroud)

旧解决方案

使用每个页面创建部分,并使用以下代码调整边距,高度和宽度.

如果您要打印A4尺寸.

然后用户

尺寸:8.27英寸和11.69英寸

@page Section1 {
    size: 8.27in 11.69in; 
    margin: .5in .5in .5in .5in; 
    mso-header-margin: .5in; 
    mso-footer-margin: .5in; 
    mso-paper-source: 0;
}



div.Section1 {
    page: Section1;
} 
Run Code Online (Sandbox Code Playgroud)

然后创建一个包含所有内容的div.

<div class="Section1"> 
    type your content here... 
</div>
Run Code Online (Sandbox Code Playgroud)