【问题标题】:Set Printing Preferences from JS从 JS 设置打印首选项
【发布时间】:2011-09-14 06:51:22
【问题描述】:

根据我在 Google 上找到的信息,我找不到使用 Javascript 设置打印首选项的方法(阅读:边距、方向、页脚等)。

我要告诉我的老板,他想做的事是不可能的。我想检查一下你们在做这件事之前会不会很好。请告诉我。

我发现在 Firefox 中,您可以使用一些 user_pref(key,val) 设置来设置用户的偏好,但这对我 90% 以上的用户都不起作用。我正在寻找可以覆盖 IE(尽可能多)、Firefox 和 Chrome 的东西。

【问题讨论】:

  • 无论如何我都不是一个网络忍者,它也不是一个 JS 解决方案,但这不就是 CSS 中的打印样式表应该完成的事情吗?
  • 添加到 Timo's,检查这个以获取 css javascriptkit.com/dhtmltutors/cssmedia.shtml 的打印媒体查询示例 基本上,创建另一个样式表并允许自己完全更改页面打印版本的外观。例如,我通常必须将正文背景颜色设置为#fff,以使打印的副本使用更少的墨水,并且看起来更好。
  • 确实可以使用这个插件jsprintsetup.mozdev.orgRegards 通过 JavaScript 设置打印属性。
  • 这确实是一个允许通过 javascript 控制打印属性的附加组件。但是它仅适用于 Firefox,不会在 IE 或 Chrome 中为您提供帮助。
  • 嗨冷冰冰,由于这个帖子太旧了,现在谷歌浏览器支持尺寸:A3横向;更改纸张大小,但不更改页眉和页脚。 Firefox 没有改变大小。那么你知道任何 Firefox 特定的改变页面方向的解决方案吗?

标签: javascript


【解决方案1】:

您可以使用 CSS 设置页面方向和边距:

@page {
   size: landscape;
   margin: 10%
}

您还可以使用<tfoot> 元素在每个页面的底部设置页脚。

编辑:正如 Beejamin 所指出的,这是一个中途之家。您无法真正更改打印机首选项(单击打印时出现在“打印对话框”中的那些)。此外,IE 严重缺乏对 @page 选择器的支持(环顾四周,看看 IE9 是否支持它,但找不到任何东西)。作为替代方案,您可以随时尝试将其应用于打印样式表中的正文。

body {
   size: landscape;
   margin: 10%
}

虽然我不知道这是多么有效。

【讨论】:

  • Jaitsu,@page 是做什么的?我在 @page 上找不到任何 css 文档...并且我尝试应用到它的所有样式都不起作用。
  • @page 是分页媒体的页面元素(仅适用于打印机,AFAIK) - 对它的支持不是很好 - 它肯定不会在我知道的任何 IE 中工作(不知道9)。它是为这种事情而设计的,但仍然不允许您调整 打印机的 设置 - 只是发送到打印机的页面“框”的边距/填充(以及添加打印机的边距)。
  • 糟糕 - 意味着包含链接:w3.org/TR/CSS2/page.html 很难搜索,因为 google 去掉了“@”符号。
  • Beejamin,你提供的那个文件很好。它适用于 Chrome,但不适用于其他浏览器。我认为 FF 会支持这一点,因为它是在 CSS2.1 中实现的。有什么想法吗?
【解决方案2】:

所以...经过一整天的寻找,我想我找到了自己问题的答案。简而言之,答案是 JS 和/或 CSS 不允许您覆盖客户端浏览器的默认页面设置。

这是我尝试过的。如果您创建一个简单的 HTML 文件,其头部为空,并且正文仅包含文本“Test”,您将能够看到我测试的内容。

  1. 打印样式表无法解决您的问题。将正文的边距设置为 0px 0px 0px 0px 与单击“文件”>“页面设置”并将所有边距设置为 0 不同。尽管打印样式表希望您相信,但它们是不同的。自己试试吧。这就是打印样式表不能解决您的问题的原因。

  2. JS 无法解决您的问题。如果您访问的每个页面都修改了您的本地 JS 属性,您可以想象吗?允许每个页面访问您的本地打印设置将构成安全漏洞,并且是不允许的。因此,JS 无法解决您的问题。

我希望有人在这里回复并让我知道我错了。否则......这很糟糕......而且它需要发生。我有很多老用户......让他们在页面设置中设置边距是一件痛苦的事情。此外,客户不希望我们重构页面,以便他们不需要。我介于岩石和硬点之间。

【讨论】:

  • 您必须尝试使用​​@page{},而不是打印媒体查询和默认页面{}。它对我有用,我希望它也对你有用。对于页面偏好,您可以设置 div 元素的高度和宽度,以 mm 为单位,例如 A4 纸的 210mm × 297mm 等,并根据您需要的页面将内容放入此 div 元素中。
【解决方案3】:

我认为您尝试在 HTML 和 CSS 中执行此操作非常不走运。问题的很大一部分是打印机边距都是特定于打印机类型的:大多数打印机都有可以设置的最小边距(相当于他们需要抓住页面的空间,以及头部的左/右移动。

可接受的边距也会因纸张尺寸而异(在较小的纸张上,边距通常会小于打印机可接受的最大值)。例如,如果您将 A5 纸装入 A4 打印机,您可以设置的边距将与您装入 A4 时不同。

网页无法通过 CSS、javascript 或其他任何方式获得这些信息。

现在,就解决方案而言,PDF 文件确实允许您在文件中嵌入一些打印机默认设置 - Acrobat pro 将允许您指定缩放选项、默认份数等。我不介意打赌Acrobat 未公开的文件格式中还有更多潜在的可用设置。

无论您使用哪种服务器端技术,都有大量功能齐全的 PDF 生成工具。好的甚至允许您提供 URL,并将 HTML+CSS 呈现为 PDF 内容——这将在某种程度上自动生成。虽然 PDF 生成是相当 CPU 密集型的,而且它对用户来说也不是无缝的(并且大多数浏览器都需要 PDF 插件)。

我知道这并不理想,但这是我要研究的途径。祝你好运!

【讨论】:

    【解决方案4】:

    使用 CSS 将帮助您实现这一目标。

    @page {
      margin:0cm;
    }
    

    【讨论】:

      【解决方案5】:

      您可以更改一些偏好。

      喜欢方向:

      @media print {
          @page {
              size: A1|A4|A5 landscape; /* auto is default portrait; */
          }
      }
      

      要隐藏默认设置生成的页脚和页眉文本,你可以这样做:

      @media print {
          @page {
              margin: 0 !important;
          }
      
          body {
              padding: 75px; /* This will act as your margin. Originally, the margin will hide the header and footer text. */
          }
      }
      

      我认为您也可以在页眉和页脚部分添加一些文本,但仍未尝试。你可以参考这里。 https://www.w3.org/TR/css-page-3/#at-ruledef-right-top

      【讨论】:

        猜你喜欢
        • 2012-04-20
        • 2020-02-21
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 2014-01-15
        • 1970-01-01
        • 2019-05-10
        • 1970-01-01
        相关资源
        最近更新 更多