使用JavaScript打印文本文件

7
我想知道是否可以使用JavaScript打印位于服务器上的txt文件。 我注意到window.print()只会为当前网页打开打印对话框。

仅使用JavaScript是不可能的。您应该使用带有或不带有一些服务器脚本语言的Ajax。 - Rafael Sedrakyan
2
如果某人不想打印页面,你不能强迫他们这样做。打印对话框是用户决定如何打印某物的方式,或者决定是否根本不想打印任何东西的方式。 - zzzzBov
5个回答

15

您只能打开用户的打印对话框,这正是应该的。如果您只想打印文本文件,则有几种方法可以触发其打印对话框。它们需要遵循同源策略(您的HTML和TXT文件需要在同一个域中)。

最简单的方法是使用文本文件打开弹出窗口,并在返回的窗口句柄上调用打印:

w = window.open('text.txt');
w.print();
如果您希望用户预览文本文件,可以使用iframe代替:
我建议将JS从HTML中分离出来,这只是一个示例
<iframe id="textfile" src="text.txt"></iframe>
<button onclick="print()">Print</button>
<script type="text/javascript">
function print() {
    var iframe = document.getElementById('textfile');
    iframe.contentWindow.print();
}
</script>

在他的问题中,他说他想要打印文件而不仅仅是显示打印对话框。 - sv_in
1
@sv_in,你说得对,我忘了加上免责声明,即不能强制用户打印他们不想要的东西。 - zzzzBov

3
JQuery选项
<body>

    <div id="txtdiv"></div>

    <script type="text/javascript">
      $('#txtdiv').load('trial.txt', function()
      {
        window.print(); //prints when text is loaded
      });

    </script>
 </body>

1

如果您只是不想删除页面内容并从文件中打印一些文本,可以在此处执行此操作:

<body>

....some tags....

<script type="text/javascript">
// or onclick function
$.load('test.txt', function( printContent ){
    history.pushState( printContent, 'Print title', '/print_page' );
    document.write( printContent );
    if( window.print() ){
         document.location = '/back_page/';
         // or history.go(-1);
    } else {
         document.location = '/history/';
    }
});
</script>


1

您说得对,window.print()只是打开当前网页的打印对话框。

我建议您编写JavaScript代码来打开一个新窗口,将文本加载到该窗口中,然后调用该窗口上的print()函数。


-3
您可以通过创建网络服务来实现此操作。
  1. 创建一个 Web 服务,并在 Web 服务中执行打印操作。

  2. 从 JavaScript 中调用 Web 服务。

如果您想知道如何使用 Web 服务进行打印,Stack Overflow 中有一个帖子可能会对您有所帮助。不要只看问题,请浏览答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接