【发布时间】:2010-02-15 23:11:27
【问题描述】:
我使用多个 iframe 构建了我的数据的可打印版本来显示订单项详细信息。但是,如果我的任何 iframe 内容大于页面,它们会在打印时被截断(它们在屏幕上显示良好)。我所有的 iframe 都指向同一个域,我正在使用浏览器的 File->Print 功能进行打印。我不认为这是特定于浏览器的错误,因为我在 IE 和 FF 中得到了相同的结果。
如何打印包含多个 iframe 的 HTML 文档?
【问题讨论】:
我使用多个 iframe 构建了我的数据的可打印版本来显示订单项详细信息。但是,如果我的任何 iframe 内容大于页面,它们会在打印时被截断(它们在屏幕上显示良好)。我所有的 iframe 都指向同一个域,我正在使用浏览器的 File->Print 功能进行打印。我不认为这是特定于浏览器的错误,因为我在 IE 和 FF 中得到了相同的结果。
如何打印包含多个 iframe 的 HTML 文档?
【问题讨论】:
我不相信有一种简单的方法可以做到这一点。如果它们都在同一个域上,为什么要使用 IFRAME?为什么不直接把数据放到页面里呢?如果您正在寻找滚动,div 和 height: ###px; overflow: auto; 将允许它无需使用 IFRAME,而 CSS 打印样式表将允许您在用户点击打印时关闭溢出/高度 CSS。
【讨论】:
我找到了答案here。虽然不太理想,但它允许我先打印主记录,然后通过单独打印每个 iframe 来选择将每个行项目打印为单独的打印作业。
【讨论】:
根据浏览器引擎的不同,这个问题有不同的答案。为了以一种简单的跨浏览器方式解决这些问题,我创建了https://github.com/noderaider/print。
我提供两个 npm 包:
通过npm安装:
npm i -S print-utils
HTML:
<iframe id="print-content" src="/frame.html"></iframe>
JavaScript (ES2015)
import { usePrintFrame } from 'print-utils'
/** Start cross browser print frame */
const disposePrintFrame = usePrintFrame(document.getElementById('print-frame'))
/** Stop using print frame */
disposePrintFrame()
npm i -S react-focus
用法:
import React, { Component } from 'react'
import reactFocus from 'react-focus'
/** Create Focus Component */
const Focus = reactFocus(React)
/**
* Use the component within your application just like an iframe
* it will automatically be printable across all major browsers (IE10+)
*/
export default class App extends Component {
render() {
return (
<div>
<div>
<h2>Welcome to react-focus</h2>
</div>
<div>
<Focus src={`?d=${Date.now()}`} />
</div>
</div>
)
}
}
【讨论】:
在您的 CSS 底部尝试以下(只是猜测):
@media print {
iframe {
overflow: visible;
}
}
【讨论】: