从HTML横向打印

我有一个HTML报告,由于列很多,所以需要打印格式。 有没有办法做到这一点,用户不得不改变文件设置?

浏览器中有哪些选项?

在你的CSS中,你可以设置@page属性,如下所示。

@media print{@page {size: landscape}} 

@page是CSS 2.1规范的一部分,但是这个size不像Is @Page {size:landscape}过时的问题的答案那样突出了。 :

CSS 2.1不再指定size属性。 目前的CSS3分页媒体模块的工作草案确定了它(但这不是标准的或被接受的)。

如前所述,尺寸选项来自CSS 3草案规范 。 理论上它可以设置为页面大小和方向,尽管在我的示例中大小被省略了。

这个支持与Firefox中提交的bug报告非常混杂,大多数浏览器都不支持。

它可能似乎在IE7中工作,但这是因为IE7将记住用户上次选择横向或纵向打印预览(只有浏览器重新启动)。

本文提供了一些建议的解决方法,使用JavaScript或ActiveX将密钥发送给用户浏览器,尽管它们并不理想,并依赖于更改浏览器安全设置。

或者,您可以旋转内容而不是页面方向。 这可以通过创建一个样式并将其应用到包含这两行的主体来完成,但这也会造成很多对齐和布局问题。

 <style type="text/css" media="print"> .page { -webkit-transform: rotate(-90deg); -moz-transform:rotate(-90deg); filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3); } </style> 

我发现的最后一个选择是在PDF中创建一个横向版本。 您可以指出,当用户选择打印它打印PDF。 不过,我无法得到这个在IE7自动打印工作。

 <link media="print" rel="Alternate" href="print.pdf"> 

总而言之,在某些浏览器中,使用@page size选项是相对容易的,但是在许多浏览器中没有确定的方法,这取决于您的内容和环境。 这可能是为什么Google文档在选择打印后创建PDF,然后允许用户打开并打印该文档。

我的解决方案

 <style type="text/css" media="print"> @page { size: landscape; } body { writing-mode: tb-rl; } </style> 

这适用于IEFirefoxChrome

引自CSS-Discuss Wiki

@page规则在CSS2到CSS2.1范围内被缩减了。 据报道,完整的CSS2 @page规则仅在Opera中实现(即使那时也很脆弱)。 我自己的测试表明IE和Firefox根本不支持@page。 根据现在已过时的CSS2规范第13.2.2节,可以覆盖用户在Landscape中的方向设置和(例如)强制打印,但相关的“尺寸”属性已从CSS2.1中删除,与事实一致没有当前的浏览器支持它。 它已被恢复到CSS3分页式媒体模块,但请注意,这只是一个工作草案(截至2009年7月)。

结论:忘记现在的@page。 如果您觉得您的文档需要以横向打印方式打印,请问问自己是否可以让设计更加流畅。 如果你真的不能(可能是因为文档包含多列数据表),你将需要建议用户将方向设置为横向,并可能概述如何在最常见的浏览器中进行。 当然,有些浏览器具有适合宽度(缩小到适合)的打印功能(例如Opera,Firefox,IE7),但依靠拥有此功能的用户或开启它是不可取的。

您可能可以使用CSS 2 @page规则 ,它允许您将“大小”属性设置为横向 。

尝试添加这个你的CSS:

 @page { size: landscape; } 

您还可以使用非标准的仅限IE的css属性书写模式

 div.page { writing-mode: tb-rl; } 
 -webkit-transform: rotate(-90deg); -moz-transform:rotate(-90deg); filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3); 

不工作在Firefox 16.0.2,但它在Chrome中工作

size属性是你所提到的。 要在打印时设置页面的方向和大小,可以使用以下方法:

 /* ISO Paper Size */ @page { size: A4 landscape; } /* Size in mm */ @page { size: 100mm 200mm landscape; } /* Size in inches */ @page { size: 4in 6in landscape; } 

这里是@page文档的链接。

我试图解决这个问题一次,但我所有的研究导致我的ActiveX控件/插件。 浏览器(3年前)不允许更改任何打印设置(打印份数,纸张大小)。

我努力向用户提出警告,他们需要在浏览器打印对话框出现时选择“横向”。 我还创建了一个“打印预览”页面,比IE6的效果好得多! 我们的应用程序在一些报告中有非常宽的数据表,打印预览会在表格溢出纸张的右边缘时向用户显示(因为IE6无法应付两张纸上的打印)。

是的,即使现在人们仍在使用IE6。

我创建了一个空白的MS文件与景观设置,然后在记事本中打开它。 复制并粘贴到我的HTML页面

 <style type="text/css" media="print"> @page Section1 {size:11 8.5in; margin:.5in 13.6pt 0in 13.6pt; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:4;} div.Section1 {page:Section1;} </style> <div class="Section1"> put text / images / other stuff </div> 

打印预览显示横向大小的页面。 这似乎是工作正常的IE和Chrome,没有在FF测试。

旋转页面内容是不够的。 这是一个适用于大多数浏览器(Chrome,Firefox,IE9 +)的正确的CSS。

首先将主体margin设置为0,否则页边距将大于您在打印对话框中设置的边距。 同时设置background颜色以可视化页面。

 body { margin: 0; background: #CCCCCC; } 

marginborderbackground需要可视化。

padding必须设置为所需的打印边距。 在打印对话框中,您必须设置相同的页边距(本例中为10mm)。

 div.portrait, div.landscape { margin: 10px auto; padding: 10mm; border: solid 1px black; overflow: hidden; page-break-after: always; background: white; } 

A4页面尺寸为210mm×297mm。 您需要从大小中减去打印边距。 并设置页面内容的大小:

 div.portrait { width: 190mm; height: 276mm; } div.landscape { width: 276mm; height: 190mm; } 

我使用276毫米,而不是277毫米,因为不同的浏览器缩放页面有点不同。 因此,其中一些将在两页上打印277毫米高的内容。 第二页将是空的。 使用276毫米更安全。

我们在打印的页面上不需要任何marginborderpaddingbackground ,所以删除它们:

 @media print { body { background: none; -ms-zoom: 1.665; } div.portrait, div.landscape { margin: 0; padding: 0; border: none; background: none; } div.landscape { transform: rotate(270deg) translate(-276mm, 0); transform-origin: 0 0; } } 

请注意,转换的起源是0 0 ! 此外,景观页面的内容必须移动276毫米!

另外,如果你有一个混合的肖像和lanscape页面IE将缩小页面。 我们通过将-ms-zoom设置为1.665来修复它。 如果你将它设置为1.6666或类似的东西,页面内容的右边框有时可能会被剪切。

如果您需要IE8或其他旧浏览器支持,您可以使用-webkit-transform-moz-transformfilter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3) 。 但是对于现代化的浏览器来说,这并不是必需的。

 <style type="text/css" media="print"> .landscape { width: 100%; height: 100%; margin: 0% 0% 0% 0%; filter: progid:DXImageTransform.Microsoft.BasicImage(Rotation=1); } </style> 

如果要将此样式应用于表格,请使用此样式类创建一个div标签,并在此div标签内添加表格标签,并在末尾关闭div标签。

该表格只能在横向上打印,而其他所有页面只能以纵向模式打印。 但问题是,如果表大小超过页面宽度,那么我们可能会失去一些行,有时也会错过标题。 小心。

祝你有美好的一天。

谢谢,Naveen Mettapally。

这也适用于我:

 @media print and (orientation:landscape) { … }