从Django Web应用程序打印收据

Hai*_*uha 7 javascript css printing django

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

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

顺便说一句,打印机连接到客户端,应该"静默"触发打印,这意味着不需要人工干预.交易完成后,应开始打印.

欢迎任何建议!

Fra*_*lli 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
Run Code Online (Sandbox Code Playgroud)

火狐

请记住,还有其他扩展用于制作自助服务终端,例如:

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

IE浏览器

对于信息亭模式,请参阅:http://support.microsoft.com/kb/154780

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

笔记

好的解决方案:

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

怎么做

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


Que*_*det 5

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

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

HTML +“打印我”

将收据显示为html页面,然后创建media="print"CSS样式表,供浏览器在打印收据时使用。有很多要说CSS打印样式表,但最重要的是,你应该删除所有的导航元素和图像将要打印昂贵。

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

<a href="javascript:window.print()">Print this page</a>
Run Code Online (Sandbox Code Playgroud)

(这对没有JS的客户来说有点麻烦,请查看此有关JS打印的教程,以获得更好的方法。)

PDF格式

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

  • XSL-FO可以帮助您做到这一点(它将带有“样式表”的XML转换为PDF)。
  • Django文档中似乎解释了一种更Python化的方式
  • 上面的页面列出了替代方法,例如xhtml2pdf(Pisa),在StackOverflow上似乎经常使用