Python 使用win32api打印内存中的对象

Python 使用win32api打印内存中的对象,python,windows,winapi,reportlab,Python,Windows,Winapi,Reportlab,试图打印使用reportlab生成的PDF,但ShellExecute()正在抛出TypeError:bytes类型的对象无法转换为Unicode。 我尝试了pdf.decode('utf-8'),但得到了UnicodeDecodeError:'utf-8'编解码器无法解码位置10中的字节0x93:无效的起始字节 from io import BytesIO import win32api from reportlab.pdfgen import canvas from reportlab.li

试图打印使用reportlab生成的PDF,但
ShellExecute()
正在抛出
TypeError:bytes类型的对象无法转换为Unicode。

我尝试了
pdf.decode('utf-8')
,但得到了
UnicodeDecodeError:'utf-8'编解码器无法解码位置10中的字节0x93:无效的起始字节

from io import BytesIO
import win32api
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter


x = 100
y = 100
buffer = BytesIO()
p = canvas.Canvas(buffer, pagesize=letter)
p.drawString(x, y, "Hello World")
p.showPage()
p.save()
pdf = buffer.getvalue()
buffer.close()

win32api.ShellExecute(0, "print", pdf, None, ".", 0)

你所尝试的是根本不可能的。不能将字节数组作为参数传递给
print
shell谓词。您需要将字节数组保存到一个临时文件中,然后将该临时文件名的名称作为参数传递给
print

您所尝试的是不可能的。不能将字节数组作为参数传递给
print
shell谓词。您需要将字节数组保存到一个临时文件中,然后将该临时文件名的名称作为参数传递给
print

作为工作目录传递
时没有多少意义“
”,也可以传递
None
以达到相同的效果。作为工作目录传递
时没有多少意义,也可以通过
None
来达到同样的效果。您知道在打印前是否可以禁止在应用程序中打开文件吗?例如,在上面的例子中使用临时文件会打开Adobe Acrobat,而不是在我的机器上打开Acrobat。在我的机器上,它会打开一个不同的PDF程序。没有安装PDF程序的机器呢?如果你想让这个过程对用户透明,你应该使用一个可以打印的PDF库。你知道在打印之前是否可以禁止在应用程序中打开文件吗?例如,在上面的例子中使用临时文件会打开Adobe Acrobat,而不是在我的机器上打开Acrobat。在我的机器上,它会打开一个不同的PDF程序。没有安装PDF程序的机器呢?如果你想让这个过程对用户透明,你应该使用一个可以打印的PDF库。