从Django Web应用程序打印收据

时间:2012-02-13 08:40:45

标签: javascript css django printing

我正在开发基于网络的POS。不幸的是,POS必须通过热敏收据打印机(TM-T88IV,Epson)打印。 Web应用程序基于Django。当用户单击Web应用程序中的控件时,是否有任何关于系统如何自动打印收据的想法?

我正在考虑为此目的在python中创建另一个服务,但这会破坏拥有Web应用程序的目的,您需要的只是浏览器,而无需任何额外的安装。

打印机已经连接到客户端,打印应该“静默”触发,这意味着不需要人工干预。交易完成后,应开始打印。

欢迎任何建议!

3 个答案:

答案 0 :(得分:7)

我认为有两种方法可以实现它:

第一种方法 - 配置浏览器

备注

如果每台客户都有一台打印机,那么这是一个很好的解决方案(因为您只能使用默认打印机)。请记住,您可以删除打印服务器(对资源非常有限的设备非常有用),制作浏览器应自动执行的脚本以打开您的文件。你可以使用这样的东西:

#!/bin/bash
printer="/dev/usb/lp0"
encoding_needed=true #false

if $encoding_needed; then
    iconv -c -t 437 $1 > $printer
else
    cat $1 > $printer
fi

火狐

  • 手动设置:
    1. 打开about:config
    2. 创建一个名为print.always_print_silent的新布尔值,并将其设置为True
    3. 创建一个名为print.show_print_progress的新布尔值,并将其设置为False
  • 使用扩展程序,例如:https://addons.mozilla.org/en-us/firefox/addon/attendprint/

请注意,还有其他扩展程序可用于制作自助服务终端,例如:

您可以使用以下选项启动它:--kiosk --kiosk-printing

Internet Explorer

对于自助服务终端模式,请参阅:http://support.microsoft.com/kb/154780

第二种方法 - 服务器处理每台打印机

备注

良好的解决方案:

  1. 你有比打印机更多的客户(少量钱或有缺陷的打印机)
  2. 比客户更多的打印机(针对不同需求的不同打印机或纸张颜色)
  3. 无法直接打印的客户端(PDA /智能手机)
  4. 您想知道打印机状态
  5. 怎么做

    1. 连接打印机(连接到客户端和/或服务器)
    2. 通过网络共享连接到客户端的打印机
    3. 管理Django服务器中的每台打印机

答案 1 :(得分:5)

这里有两个选项:打印html页面或提供PDF文件。

注意:最初并不清楚打印应该是自动的,这意味着答案对OP没有直接用处。

HTML +“打印我”

将收据显示为html页面,然后创建一个media="print" CSS样式表,浏览器在打印收据时将使用该样式表。有a lot to say about CSS print style sheets,但重要的是你应该删除所有打印费用昂贵的导航元素和图像。

执行此操作时,用户只需自己打印页面即可。您还可以添加“打印我”按钮,该按钮将向您的用户显示打印机对话框。这是通过JavaScript完成的:

<a href="javascript:window.print()">Print this page</a>

(这对于没有JS的客户来说有点障碍,请更好地检查this tutorial about JS printing。)

PDF

在Django中生成PDF,并将其显示给用户。他可以自由打印或稍后将其保存在计算机上。大多数网站都这样做,因为它更容易控制PDF文件的布局,并且更容易使它看起来像真正的收据。

  • XSL-FO可以帮助您完成此操作(它将XML转换为带有“样式表”的PDF)。
  • 似乎在Django docs
  • 中解释了更多的Pythonic方式
  • 以上几页列出了xhtml2pdf(Pisa)等替代品,似乎在StackOverflow上大量使用

答案 2 :(得分:2)

如果在google code上使用raw / esc / p,请尝试使用jzebra。