我有一个带有一些文本区域的表单,当文本超出文本框时允许滚动条。用户希望能够打印屏幕,但此文本不可见。如何使所有文本都可见以供打印?我最好制作一个打印到 pdf 的链接还是什么?
原文由 Timothy Ruhle 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个带有一些文本区域的表单,当文本超出文本框时允许滚动条。用户希望能够打印屏幕,但此文本不可见。如何使所有文本都可见以供打印?我最好制作一个打印到 pdf 的链接还是什么?
原文由 Timothy Ruhle 发布,翻译遵循 CC BY-SA 4.0 许可协议
循环遍历每个文本区域并将内容移动到持有者
window.onbeforeprint = function () {
$('.print-content').remove();
$('textarea').each(function () {
var text = $(this).val();
$(this).after('<p class="well print-content">' + text + '</p>');
});
}
并使用以下 CSS
.print-content {
display: none !important;
}
@media print {
.print-content {
display: block !important;
}
textarea {display: none !important;}
}
原文由 Samuel Gray 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答1.5k 阅读✓ 已解决
2 回答912 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
1 回答920 阅读✓ 已解决
2 回答795 阅读
1 回答796 阅读✓ 已解决
2 回答1.2k 阅读
单靠 CSS 是 无法解决 这个问题的。
为什么纯 CSS 解决方案是不够的(带演示)
让我说服您, 涉及打印样式表和
overflow: visible
的答案是不够的。 打开 此页面 并查看源代码。正是他们建议的,对吧?现在打印预览它(比如,在 OS X 上的 Chrome 13 中,就像我一样)。请注意,当您尝试打印时,您只能看到注释的一两行!这是我的测试用例的 URL: https ://alanhogan.github.io/web-experiments/print_textarea.html
解决方案:
打开一个新窗口并将文本区域的内容写入其中以供打印的 JavaScript 链接。要么:
更新文本区域时,将其内容复制到另一个元素,该元素在屏幕上隐藏但在打印时显示。
(如果您的
textarea
是只读的,那么服务器端解决方案也是可行的。)请注意,
textarea
s 对待空白的方式与默认情况下的 HTML 不同,因此您应该考虑应用 CSSwhite-space: pre-wrap;
在您打开的新窗口中或您的助手div
, 分别。 IE7 及更早版本不理解pre-wrap
但是,如果这是一个问题,要么接受它,要么使用解决方法。或者使弹出窗口实际上是纯文本,字面意思是媒体类型text/plain
(这可能需要服务器端组件)。“打印助手”解决方案(带代码+演示)
我已经创建了 一个 JavaScript 技术的 演示。
核心概念是将文本区域内容复制到另一个打印助手。代码如下。
HTML:
CSS(全部/非打印):
CSS(打印):
Javascript(使用 jQuery):
同样, 成功 的基于 JavaScript 的演示位于 https://alanhogan.github.io/web-experiments/print_textarea_js.html 。