使用Python和;GSPrint不工作

使用Python和;GSPrint不工作,python,node.js,pdf,printing,Python,Node.js,Pdf,Printing,我一直在尝试通过Win32API模块和GSPrint打印用Reportlab创建的PDF文档 使用命令行工作起来很轻松,但是当我使用Win32API.ShellExecute()时,似乎什么都没有打印出来 以下是我在创建PDF时调用的代码;filename=tempfile.mktemp(“.pdf”)用于创建临时pdf hInstance = win32api.ShellExecute( 0, "open", "gsprint.exe", '-printer "HP Laser

我一直在尝试通过Win32API模块和GSPrint打印用Reportlab创建的PDF文档

使用命令行工作起来很轻松,但是当我使用
Win32API.ShellExecute()
时,似乎什么都没有打印出来

以下是我在创建PDF时调用的代码;
filename=tempfile.mktemp(“.pdf”)
用于创建临时pdf

hInstance = win32api.ShellExecute(
  0,
  "open",
  "gsprint.exe",
  '-printer "HP LaserJet 3055 PCL6 Class Driver" ' + filename,
  ".",
  0
)
print filename
handleInstanceID也是返回值,即42,但没有任何内容进入打印机

设置是这样的,使用NodeJS将JSON数据传递给使用STDIN的Python,我使用了
pythonshell
模块。当python脚本接收到一个JSON文档时,它会在一个临时文件中使用ReportLab创建一个PDF,然后调用ShellExecute,将hInstance代码返回给NodeJS

了解一下这一点会很有帮助

NodeJS应用程序正在使用节点窗口作为Windows服务运行

NodeJS脚本

app.post('/printKot', function (req, res) {

    var scriptP = path.join(process.cwd(), 'myPythonScripts', 'demo.py');

    //res.json({path: path.join(process.cwd(), 'myPythonScripts')});

    var pyshell = new PythonShell('printKot.py', {scriptPath: "C:\\\\Users\\\\Sid\\\\posistFineDine\\\\myPythonScripts" });

    // sends a message to the Python script via stdin 
    //pyshell.send(JSON.stringify(req.body.billYoData));
    var kotData = '{"billdata":{"Tp":"Rooftop Table","TN":10,"KN":11,"BN":"12","BD":"2015-06-17T15:09:58.439Z","Name":"","Add":"","St":"","Cy":"","Sta":"","Pin":"","PNm":"","MNm":"","Waiter":"Waiter Sid Gomez","DAmt":0,"Ft":"","WU":false},"billitemsdata":[{"N":"Chilli Bites Potato","Q":1,"R":0,"W":0,"U":""},{"N":"Chicken Ninja ","Q":1,"R":0,"W":0,"U":""},{"N":"Chilli Bites Ckn","Q":1,"R":0,"W":0,"U":""}],"billtaxesdata":[{"N":null,"A":0}],"subtotal":0,"totalTax":0,"roundOff":0,"grandTotal":0,"totalQuantity":3,"iskot":true,"printername":null,"copies":2,"printertype":null}'

    pyshell.send(kotData);

    pyshell.on('message', function (message) {
        //console.log(message);
        console.log("Printed");
        res.json({msg: message});
    });

    pyshell.end(function (err) {
      console.log(err);
    });

    console.log("Printed last")

    //res.json({msg:true});*/

});
Python脚本

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, cm, letter
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import Paragraph, Table, TableStyle 
from reportlab.lib.enums import TA_JUSTIFY, TA_LEFT, TA_CENTER, TA_RIGHT
from reportlab.lib import colors

import json
import tempfile
import win32api
import win32print
import sys
import base64
import os
import subprocess



#jsonData = sys.stdin


#kotObject ='{"billdata":{"Tp":"Table","TN":14,"KN":6,"BN":"16","BD":"2015-06-12T12:57:11.844Z","Name":"","Add":"","St":"","Cy":"","Sta":"","Pin":"","PNm":"","MNm":"","Waiter":"Waiter Sid Gomez","DAmt":0,"Ft":"","WU":false},"billitemsdata":[{"N":"Chow Manchow Chicken","Q":1,"R":0,"W":0,"U":""},{"N":"Double Corn Chicken","Q":1,"R":0,"W":0,"U":""},{"N":"Double Corn Veg","Q":1,"R":0,"W":0,"U":""},{"N":"Whopping Wonton Soup Veg ","Q":1,"R":0,"W":0,"U":""}],"billtaxesdata":[{"N":null,"A":0}],"subtotal":0,"totalTax":0,"roundOff":0,"grandTotal":0,"iskot":true,"totalQuantity": 0, "printername":null,"copies":2,"printertype":null}'


bill = json.load(sys.stdin)
#bill = json.loads(kotObject)


filename = tempfile.mktemp(".pdf")

itemLen = len(bill['billitemsdata'])
taxLen = len(bill['billtaxesdata'])

width, height = A4
styles = getSampleStyleSheet()

styles.add(ParagraphStyle(name='HeaderFooter', fontName ='Helvetica',fontSize=10, alignment=TA_CENTER))

styles.add(ParagraphStyle(name='RightAlignedValueAmount', fontName ='Helvetica',fontSize=10, alignment=TA_RIGHT))

styles.add(ParagraphStyle(name='Details', fontName ='Helvetica', fontSize=10, alignment=TA_CENTER))

styles.add(ParagraphStyle(name='LeftAligned', fontName='Helvetica', fontSize=10, alignment=TA_LEFT))


def coord(x, y, unit=1):
    x, y = x * unit, height -  y * unit
    return x, y


hItem = Paragraph('''<b>Items</b>''', styles["LeftAligned"])
hQty = Paragraph('''<b>Qty</b>''', styles["RightAlignedValueAmount"])
hRate = Paragraph('''<b>Qty</b>''', styles["RightAlignedValueAmount"])


data = []

data.append([Paragraph('Type: <b>%s</b>' % bill['billdata']['Tp'], styles["LeftAligned"]), '', ''])
data.append([Paragraph('KOT Number: <b>%s</b>' % bill['billdata']['KN'], styles["LeftAligned"]), '', ''])
data.append([Paragraph('Bill Number: <b>%s</b>' % bill['billdata']['BN'], styles["LeftAligned"])])
data.append([Paragraph('Date: <b>%s</b>' % bill['billdata']['BD'], styles["LeftAligned"])])
data.append([hItem, '', hQty])


for item in bill['billitemsdata']:
    data.append([Paragraph('%s' % item['N'], styles["LeftAligned"]), '', Paragraph('%s' % item['Q'], styles["RightAlignedValueAmount"])])


data.append(['','',''])

data.append([Paragraph('<b>Total Qty:</b>', styles["LeftAligned"]), '', Paragraph('%s' % bill['totalQuantity'], styles["RightAlignedValueAmount"])])


table = Table(data, colWidths=[5 * cm, 1 * cm, 2 * cm])

table.setStyle(TableStyle([
                        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
                        ('SPAN', (0,0),(2,0)),
                        ('SPAN',(0,1), (2,1)),
                        ('SPAN',(0,2), (2,2)),
                        ('SPAN',(0,3), (2,3)),
                        ("LINEBELOW", (0, 3), (-1, 3), 1, colors.black, None, (1,2,3)),
                        ("LINEBELOW", (0, 4), (-1, 4), 1, colors.black, None, (2,2,4)),
                        #('SPAN', (0,-1), (2,-1)),
                        #('SPAN', (0,2), (-1,2)),
                        #("LINEBELOW", (0, 3), (-1, 3), 1, colors.black, None, (1,2,3)),
                        #("LINEBELOW", (0,itemLen+3),(-1,itemLen+3),1, colors.black, None, (1,2,3))
                        #("LINEABOVE", (0, -1), (2, -1), 1, colors.black),
                        #("LINEBELOW", (0, -1), (2, -1), 1, colors.black),
                        #('INNERGRID', (0,0), (-1,-1), 0.25, colors.blue),
                        #('BOX', (0,0), (-1,-1), 0.25, colors.red)
                       ]))


c = canvas.Canvas(filename, pagesize=A4)
#c.line(10,0,10,height)
#c.setFont('Helvetica', 12)
#c.drawString(10,840-cm,"Welcome to Reportlab!")

#print "Width %s" % width
#print "Height %s" % height
#print "CM %s" % cm

w, h = table.wrap(0, 0)

#print "Table Width %s" % w
#print "Table Height %s" % h

table.wrapOn(c, width, height)
table.drawOn(c, 10, height-(h+cm+80))
c.save()


# if sys.version_info >= (3,):
#   raw_data = bytes ("This is a test", "utf-8")
# else:
#   raw_data = "This is a test"

# printer_name = 'HP LaserJet 3055 PCL6 Class Driver'
# hPrinter = win32print.OpenPrinter (printer_name)
# try:
#   hJob = win32print.StartDocPrinter (hPrinter, 1, ("test of raw data", None, "RAW"))
#   try:
#     win32print.StartPagePrinter (hPrinter)
#     win32print.WritePrinter (hPrinter, raw_data)
#     win32print.EndPagePrinter (hPrinter)
#   finally:
#     win32print.EndDocPrinter (hPrinter)
# finally:
#   win32print.ClosePrinter (hPrinter)

 hInstance = win32api.ShellExecute(
   0,
   "open",
   "gsprint",
   '-printer "HP LaserJet 3055 PCL6 Class Driver" ' + '"%s"' % filename,
   ".",
   0
 )
 print filename
从reportlab.pdfgen导入画布
从reportlab.lib.pagesizes导入A4、厘米、字母
从reportlab.lib.styles导入getSampleStyleSheet、ParagraphStyle
从reportlab.platypus导入段落、表格、表格样式
从reportlab.lib.enums导入TA_JUSTIFY、TA_LEFT、TA_CENTER、TA_RIGHT
从reportlab.lib导入颜色
导入json
导入临时文件
导入win32api
导入win32print
导入系统
导入base64
导入操作系统
导入子流程
#jsonData=sys.stdin
#kotObject=“{”billdata:“{”Tp:“Table”,“PNm:“MNm:“water:“water:“water:”Sid Gomez”,“DAmt:”0,“Ft:”WU:”false:”billitestdata:“{”N:“Chow Manchow Chicken”,“Q:”1,“R:”0,“W:”U:“,”N:”N:”双玉米“,”Q:”0“,”W:”,”N:“,”N:”N:“,”N:”N:”N:”N:”N:”N:”N:”N:“,”N:”N:”N:”N:“N:”N:“N:“N:”N:”N:“N:”N:“N:“N:”N:“N:“N:”N{“N:“双份玉米蔬菜”,“Q”:1,“R”:0,“W”:0,“U”:“},{”N:“大馄饨汤蔬菜”,“Q”:1,“R”:0,“W”:0,“U”:“}],“billtaxesdata”:[{”N:“空”,A:“0}],“小计”:0,“总税”:0,“舍入”:0,“总税”:0,“iskot”:真,“总数量”:0,“打印名称”:空,“复印件”:2,“打印类型”:空}”
bill=json.load(sys.stdin)
#bill=json.loads(kotObject)
filename=tempfile.mktemp(“.pdf”)
itemLen=len(账单['billitemsdata'])
taxLen=len(账单['billtaxesdata'])
宽度、高度=A4
styles=getSampleStyleSheet()
添加(段落样式(name='HeaderFooter',fontName='Helvetica',fontSize=10,alignment=TA_-CENTER))
添加(段落样式(name='RightAlignedValueAmount',fontName='Helvetica',fontSize=10,alignment=TA_RIGHT))
添加(段落样式(name='Details',fontName='Helvetica',fontSize=10,alignment=TA_CENTER))
添加(段落样式(name='LeftAligned',fontName='Helvetica',fontSize=10,alignment=TA_LEFT))
def坐标(x,y,单位=1):
x、 y=x*单位,高度-y*单位
返回x,y
hItem=段落(“'Items'”,样式[“LeftAligned”])
hQty=段落(“数量”,样式[“RightAlignedValueAmount”])
hRate=段落(“数量”,样式[“RightAlignedValueAmount”])
数据=[]
数据.append([段落('类型:%s'%bill['billdata']['Tp'],样式[“LeftAligned”]),'','',])
数据。追加([段落('KOT编号:%s'%bill['billdata']['KN'],样式[“LeftAligned”],'','')
数据.追加([段落('票据编号:%s'%Bill['billdata']['BN'],样式[“LeftAligned”]))
数据。追加([段落('日期:%s'%bill['billdata']['BD'],样式[“LeftAligned”]))
数据追加([hItem',hQty])
对于账单中的项目['billitemsdata']:
数据。追加([段落(“%s”%item['N'],样式[“LeftAligned”]),“”,段落(“%s”%item['Q'],样式[“RightAlignedValueAmount”]))
data.append(['',''))
数据.追加([段落('Total Quantity:',样式[“LeftAligned”]),'',段落('%s'%bill['totalQuantity'],样式[“RightAlignedValueAmount”]))
表=表(数据,冷宽=[5*cm,1*cm,2*cm])
表.setStyle(表样式([
('VALIGN',(0,0),(-1,-1),'MIDDLE'),
(‘SPAN’,(0,0),(2,0)),
(‘SPAN’,(0,1),(2,1)),
(‘SPAN’,(0,2),(2,2)),
(‘SPAN’,(0,3),(2,3)),
((-1,3),1,颜色。黑色,无,(1,2,3)),
((-1,4),1,颜色。黑色,无,(2,2,4)),
#(‘SPAN’,(0,-1),(2,-1)),
#('SPAN',(0,2),(-1,2)),
#((-1,3),1,颜色。黑色,无,(1,2,3)),
#(“linedown”,(0,itemLen+3),(-1,itemLen+3),1,colors.black,None,(1,2,3))
#(“LINEABOVE”,(0,-1),(2,-1),1,颜色。黑色),
#(“线下“,(0,-1),(2,-1),1,颜色。黑色),
#('INNERGRID',(0,0),(-1,-1),0.25,颜色。蓝色),
#('BOX',(0,0),(-1,-1),0.25,颜色。红色)
]))
c=canvas.canvas(文件名,页面大小=A4)
#c、 线(10,0,10,高度)
#c、 setFont('Helvetica',12)
#c、 抽绳(10840厘米,“欢迎来到Reportlab!”)
#打印“宽度%s”%Width
#打印“高度%s”%Height
#打印“厘米%s”%CM
w、 h=表。换行(0,0)
#打印“表格宽度%s”%w
#打印“表格高度%s”%h
表2.wrapOn(c、宽度、高度)
表.图纸(c,10,高度-(h+cm+80))
c、 保存()
#如果sys.version_info>=(3,):
#原始数据=字节(“这是一个测试”,“utf-8”)
#其他:
#原始数据=“这是一项测试”
#打印机名称='HP LaserJet 3055 PCL6类驱动程序'
#hPrinter=win32print.OpenPrinter(打印机名称)
#尝试:
#hJob=win32print.StartDocPrinter(hPrinter,1,(“原始数据测试”,无,“原始”))
#尝试:
#win32print.StartPagePrinter(hPrinter)
#win32print.WritePrinter(HPPrinter,原始数据)
#win32print.EndPagePrinter(HPPrinter)
#最后:
#win32print.EndDocPrinter(HPPrinter)
#最后:
#win32print.ClosePrinter(HPPrinter)
hInstance=win32api.ShellExecute(
0,
“开放”,
“gsprint”,
'-printer“HP LaserJet 3055 PCL6类驱动程序”'+'%s''%filename,
".",
0
)
打印文件名
T