【问题标题】:Can javascript get or set printer info?javascript可以获取或设置打印机信息吗?
【发布时间】:2015-03-28 10:22:35
【问题描述】:

通过 Javascript(或 jquery)是否可以执行以下操作之一...

  1. 找出浏览器打印对话框的当前页面大小和方向。

  1. 为浏览器的打印对话框设置(或至少建议)页面大小和方向。

我有各种尺寸和尺寸的图像,我想提供一个可打印的表格,以充分利用所选的页面大小。 IE。我想缩放和/或旋转图像,使其尽可能多地占据页面。

或者有没有办法在 CSS 中处理这个问题?

【问题讨论】:

  • 我认为这在纯 Javascript 中是不可能的。您只能使用将显示打印机对话框的 window.print()。在此对话框中,用户可以更改页面大小和方向,我认为您唯一的选择是询问用户他/她打算打印的页面大小和方向并相应地格式化页面。
  • CSS 将是要走的路。理论上,您可以使用这样的东西:@media print and (orientation:portrait) {.myImage {-moz-transform:rotate(90deg); -ms-transform:rotate(90deg); -webkit-transform:rotate(90deg); transform:rotate(90deg);}} 以确保无论用户的打印对话框设置如何,短、宽的图片始终以横向打印。您可能还想将图片放在一个设置了page-break-inside: avoid; 的 div 中。
  • @DoctorDestructo 感谢您的建议。我试过了,但浏览器似乎总是坚持它的大多数方向和纸张大小,不管我在 CSS 中有什么。
  • @xtempore 重点不是改变浏览器的方向设置,而是使内容适合浏览器的方向设置,无论它可能是什么。有关概念验证,请参阅下面的答案。

标签: javascript jquery image printing


【解决方案1】:

这超出了 JS 的范畴,因为打印对话框是特定于操作系统的。

不过,最接近配置的是media queries in CSSmedia attribute of <link> tags。无需建议页面大小和/或方向,只需调整页面以使其在打印时看起来合适。这也可能意味着屏幕上的 CSS 在打印时完全不同。只要确保您的 HTML 是为适应这种情况而创建的。

或者更好的是,提供一个完全不同的页面,使用完全不同的 CSS 进行打印。这样一来,您就不必过度设计单个页面以在超过 1 种媒体上看起来不错(并最终得到意大利面条)。

【讨论】:

  • 始终建议使用打印样式表。或者,您还可以使用一些库从您的网站生成 PDF
  • 我只是想让它对用户来说尽可能简单。我可能只是假设一个纵向,然后相应地旋转图像。要么使用 PDF,要么使用 PDF 选项,尽管我觉得这为用户增加了额外的步骤。
  • @xtempore 一个特殊的“打印友好”页面不需要额外的步骤。它只需要在隐藏的 iframe 中打开该特殊页面,并立即调用print(),从而打开打印对话框。 PDF 需要额外的步骤(显示 PDF),但将其视为让用户查看内容。
【解决方案2】:

我不知道是否有任何方法可以针对适用于打印媒体的特定页面尺寸,但是当用户以纵向打印时,您可以将横向图像旋转 90 度。这适用于 Firefox(尚未测试其他):

<!DOCTYPE html>
<html>
  <head>
    <style>
      @media print {
        body {
          margin: 0;
        }
      }
      @media print and (orientation:portrait) {
        .landscapeImage {
          -moz-transform-origin: 200px 200px; /* set both values to half of image height */
          -ms-transform-origin: 200px 200px; /* set both values to half of image height */
          -webkit-transform-origin: 200px 200px; /* set both values to half of image height */
          transform-origin: 200px 200px; /* set both values to half of image height */
          -moz-transform: rotate(90deg);
          -ms-transform: rotate(90deg);
          -webkit-transform: rotate(90deg);
          transform: rotate(90deg);
        }
      }
      .landscapeImage { /* faux image */
        height: 400px;
        width: 600px;
        display: inline-block; /* not part of solution */
        box-sizing: border-box; /* not part of solution */
        border: 4px solid black; /* not part of solution */
      }
    </style>
  </head>
  <body>

    <div class="landscapeImage">
      Pretend this is an image
    </div>

  </body>
</html>

多页打印作业可能要复杂得多。

【讨论】:

  • 谢谢。它适用于 Firefox,但不适用于 Chrome。现在我将假设纵向(大多数人将其作为默认设置),稍后我可能会以 PDF 的形式实现(尽管这样做的缺点是必须指定页面大小 - Letter 或 A4)。
猜你喜欢
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
相关资源
最近更新 更多