【问题标题】:Print specific HTML打印特定的 HTML
【发布时间】:2011-03-21 00:25:06
【问题描述】:

是否可以为实际未嵌入页面的打印机输出标记?

问题是我有一个 Flash 应用程序,它以一种对打印不友好的方式从后端呈现动态数据,但客户希望有一个可打印的版本以及原始数据。我可以通过简单的 PHP 页面查询轻松输出此类内容,但问题是当用户调用打印时将其发送到打印机。

是创建自定义打印按钮并要求用户单击该按钮(而不是他们的浏览器打印功能),然后在新窗口中加载 PHP 页面并打印该页面的唯一选项吗?或者我可以像使用 media 属性覆盖 CSS 一样有效地覆盖发送到打印机的 HTML 内容吗?

【问题讨论】:

  • Javascript 有一个 window.onbeforeprint 事件。我自己从未使用过它,但它可能值得一看。
  • 我确实遇到过,但它似乎只有 IE?

标签: html printing


【解决方案1】:

发送到打印机的 HTML 文档必须与发送到浏览器的 HTML 文档相同。正如您所建议的,一种特殊的打印布局是实现此行为的一种常见方式。

另一个可能是采用 CSS 媒体属性的想法并使用它运行:在原始 HTML 文档中渲染原始数据,将其隐藏在屏幕样式表中,并在打印样式表中显示。然而,因为听起来这个应用程序中的大部分导航都发生在 SWF 中,而不是浏览器的地址栏上(我仍然不完全确定我得到了这个问题),所以这可能不可行。也许 Flash 文件可以将原始数据发送到页面上的 Javascript 以将其格式化为隐藏的 HTML,但这可能有点太多的工作不值得这个功能,用户甚至可能没有意识到他们的本意是只需打印该页面。我知道我不会期望这会神奇地发生。

此时,打印我的页面可能是您的最佳选择。 Javascript+CSS 解决方案可能有效,但可能不值得您花时间。

【讨论】:

  • “也许 Flash 文件可以将原始数据发送到页面上的 Javascript 以将其格式化为隐藏的 HTML” 实际上,这听起来很干净,应该可以工作。数据源已经为 Flash 格式化为与 HTML 非常相似的 XML,并且实际上包括文本内容的文字 HTML,所以只要我可以解决同一页面上的替代布局(最小化打印布局与 Flash 应用程序布局),那么它应该易于在该页面上以 HTML 格式显示数据。我会试一试!
  • “用户可能甚至没有意识到他们只是为了打印该页面。我知道我不会期望这会神奇地发生。”有趣的是,您是说如果页面是完整的 Flash,您不会期望 File>Print 或 Ctrl+P 有意义?这是因为您对 Flash 网站的一般经验,还是我的问题对您的其他暗示? “打印我”页面是指网站上的一个按钮,上面写着“打印此页面”或类似内容,它会生成一个包含可打印内容的新窗口?
  • @Aaron:差不多就是这样。我知道大多数网站通常不会竭尽全力使 Flash 界面可打印,所以我需要被明确告知它应该可以工作。当然,这可能只是我。对于第二个问题,这就是我的意思:)
  • @Aaron:另外,由于这通常是第一次提问的人,所以我会提早提醒:如果它最终回答了您的问题,请单击此答案旁边的复选标记问题 :) 这将这个问题标记为已回答以供其他人参考,为我提供良好答案的声誉积分,并为您记住在完成后接受答案提供声誉积分:)
  • 感谢您的提示(以及答案!),我将在第二天左右进行测试,并尽量记住报告结果。
【解决方案2】:

我可能会将content 属性与:before 伪元素一起使用。

HTML:

<div id="justForPrint"></div>

CSS:

#justForPrint {
    display: none
}

@media print {
    #justForPrint {
        display: block
    }
    #justForPrint:before {
        content: "test data, test data, test data, test data, test data, test data, test data, test data, test data, test data, test data"
    }
}

【讨论】:

  • 重新阅读问题的其余部分。我认为这实际上与情况不符:/
  • @Matchu:这似乎与我有关。他可以在内联样式表中输出“原始数据”。隐藏的justForPrint div 将保存内容,并且只有在页面打印时才可见。
  • 嗯,也许我只是误解了。在我看来,他的问题是他有一个 Flash 应用程序,并且希望在用户点击浏览器的“打印”按钮时根据 SWF 的状态和 SWF 异步下载的数据发送 HTML 而非原始文档.如果是这种情况,那么内联样式表也有同样的问题:当服务器最初将 HTML 发送到客户端时,特定数据不可用,因此不能成为原始文档的一部分。问题不在于他不想在标准 DOM 中使用该标记;那时它实际上无法输出。
  • @Matchu:我也不确定。如果您说的是这种情况,他可以改为从 Flash 中触发 JavaScript 函数,以便在需要时更新 content 属性。我同意“打印我”页面更容易实现(并且可能对用户来说更清晰 - 大多数用户期望一个特殊的“打印视图”页面)。
  • 是的,问题是只有一个HTML页面通过SWF异步下载和呈现各种数据;在页面中嵌入所有数据并不是很可行,尤其是考虑到动态组合和其他在客户端发生的对其呈现状态的修改。但是,如果我正确理解通过 Javascript 提供当前数据的想法,我认为这会奏效。所以我假设这意味着通过 Javascript 对 DOM 的修改将按照修改后的方式发送到打印机?
猜你喜欢
  • 2021-12-11
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
相关资源
最近更新 更多