【问题标题】:How to print a html page received from the server?如何打印从服务器接收到的 html 页面?
【发布时间】:2013-05-28 02:04:51
【问题描述】:

我正在尝试打印在我的服务器上使用 Node.js 生成的 HTML 页面。我已将页面带到客户端作为对 AJAX 请求的响应,并将其放在 javascript 变量中。

var resp_json = printRequest.getResponseJson();

现在我正在尝试打印呈现的 HTML 页面(即没有标签)而不是要发送的 DOM 对象。

我读到了window.print(),但它只在浏览器中打印当前页面。谁能给我建议一种方法。

此外,在节点处生成 HTML 页面是正确的方法,或者应该是任何其他类型的文档。该页面应该是在节点上动态生成的,最终结果应该是一个打印的文档。 提前谢谢!!

附:我正在使用闭包库,不要问为什么,这已经为我决定了。

附言我对javascriptnode.js 还很陌生,所以不要害怕进行冗长的演讲,我会全神贯注!!

【问题讨论】:

    标签: javascript html ajax node.js


    【解决方案1】:

    无弹窗

    function printHTMLString(htmlString) {
         var originalDocument = document.body.innerHTML;    
         document.body.innerHTML = htmlString;    
         window.print();   
         document.body.innerHTML = originalDocument;
    }
    

    带弹窗

    var popupWIndow = window.open('','','width=200,height=100');    
    popupWIndow.document.write(jsonResponse);    
    popupWindow.window.print();
    

    如果由于某种原因它不起作用,请在 print() 之前添加以下行

    popupWindow.window.location.reload(); 
    

    还需要在打印前将json对象转换为字符串

    JSON.stringify(jsonObject)
    

    但要使所有这些工作,浏览器必须能够将其作为 HTML 页面读取,以便它可以呈现它。 JSON 对象不起作用。

    【讨论】:

    • 它没有用。首先,我必须在我的浏览器上允许弹出窗口,这是一个很大的禁忌。其次,它在我允许它并在其中打印我的页面后打开了一个弹出窗口,但没有出现打印提示。
    • ReferenceError: popupWindow is not defined
    • 检查你的变量名。我也添加了一个没有弹出窗口的解决方案。试试它是否适合你。
    • 没有弹出窗口的方法效果很好,只是有点小问题。只有在用户在打印提示上按 OK 后才会显示原始页面,直到显示要打印的 html 文档。
    • 是的。对于那个很抱歉。一个优雅的解决方案是使用 htmlString 打开一个隐藏的iframe,然后打印它。您当前的页面完全不会受到影响。如果有帮助,请接受作为答案。
    【解决方案2】:

    你可以使用https://code.google.com/p/wkhtmltopdf/

    有了它,您可以从任何页面直接从 url 或通过文件呈现 pdf。它会将页面呈现为 pdf,然后您可以打印整个 pdf。

    nb :您可以打印一页或连接多页。

    【讨论】:

    • @Amo 渲染应该在服务器端执行。如果我这样做,我必须向客户发送一个 pdf 文件,我可以从那里去哪里?
    • 你可以在服务器端执行 wkhtmltopdf 这就是我的工作。
    • 好吧,假设我这样做了,我将如何在客户端打印 pdf 文件?如何通过javascript打开文件的打印提示?
    • 使用服务器端脚本或应用程序打印,您可以使用表单或 get 或任何客户端 - 服务器通信形式从网页调用。然后您可以将文件发送给客户端。
    【解决方案3】:

    通常的做法是打开一个带有您要打印的内容的新浏览器窗口,然后调用 window.print()

    【讨论】:

    • 这是一个选项,但它会在打印之前首先显示页面,我试图避免这种情况。如果情况变得更糟,这就是我决定走的路。
    【解决方案4】:

    您可以创建一个 iframe,将您的 html 页面添加到 iframe.src,然后调用 print:

    window.frames[yourIframeName].focus();
    window.frames[yourIframeName].print();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      相关资源
      最近更新 更多