打印html页面时的保证金

问题描述 投票:116回答:6

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

谢谢。

html css printing stylesheet
6个回答
208
投票

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

body
{
  margin: 25mm 25mm 25mm 25mm;
}

对于字体大小,请使用pt作为打印介质。

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

您还应该知道IE7 ++会自动调整大小以使其最合适,即使您使用cmmm也会导致一切都错误。要覆盖此行为,用户必须选择“打印预览”,然后将打印尺寸设置为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;  
} 

相关回答:Disabling browser print options (headers, footers, margins) from page?


19
投票

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

this question的回答是:

@page {
  size: 210mm 297mm; 
  /* Chrome sets own margins, we change these printer settings */
  margin: 27mm 16mm 27mm 16mm; 
}

但是,我最终使用这个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;
    }
}


特例:长桌

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

bleeding edges

我可以解决这个问题,感谢this answer

table { page-break-inside:auto }
tr    { page-break-inside:avoid; page-break-after:auto }
thead { display:table-header-group }
tfoot { display:table-footer-group }

另外设置@page的上下边距:

@page { 
    size: auto;
    margin: 20mm 0 10mm 0;
}
body {
    margin:0;
    padding:0;
}

结果:

solved bleeding edges

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


9
投票

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

  • 点(pt)
  • 厘米(cm)

我确定还有其他的,有关print-css的一篇优秀文章可以在这里找到:Going to PrintEric Meyer


8
投票

更新,简单的解决方案

@media print {
   body {
       display: table;
       table-layout: fixed;
       padding-top: 2.5cm;
       padding-bottom: 2.5cm;
       height: auto;
   }
}

旧解决方案

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

如果您要打印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;
} 

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

<div class="Section1"> 
    type your content here... 
</div>

1
投票

我还推荐pt与cm或mm,因为它更精确。此外,我无法让@page在Chrome中工作(版本30.0.1599.69 m)它忽略了我为边距设置的任何内容,无论大小。但是,您可以使用它来处理文档的正文边缘,这很奇怪。


0
投票

如果您知道目标纸张尺寸,则可以将内容放在具有该特定尺寸的DIV中,并为该DIV添加边距以模拟打印边距。不幸的是,除了显示打印对话框之外,我不相信您对打印功能有额外的控制权。

© www.soinside.com 2019 - 2024. All rights reserved.