使用Win32api打印到打印机

0 投票
1 回答
2137 浏览
提问于 2025-04-16 21:52

我正在尝试让我的一个Python脚本通过Win32api.ShellExecute来打印一个CSV文件,也就是这样:

win32api.ShellExecute(0,"print","C:\Test.csv",None,".",0)

我的问题是:当我把这个文件和Open Office关联时,它就是完全不打印。用记事本打印没问题,用Microsoft Excel打印也没问题,但在Open Office里就是不打印。

而且没有任何错误信息。如果有人知道怎么能得到一个错误信息,或者至少有什么方法可以让我尝试解决这个问题,我会很感激。我去过OpenOffice.org的网站和他们的维基,所有的解决方案都涉及到他们的集成Python宏脚本,使用的是UNO模块。我想从一个单独的应用程序来调用打印功能。

1 个回答

1

你依赖于系统的命令行来为特定的文件类型定义一个“打印”操作。这个过程是这样的:

  1. 系统会去掉文件的扩展名,这里是“.csv”。
  2. 系统会在注册表中查找这个扩展名,具体是在HKEY_CLASSES_ROOT下,找到与之关联的文件类型。比如在我的系统中,这个文件类型是“Excel.CSV”。
  3. 在HKEY_CLASSES_ROOT\filetype下,会有一个“shell”键,下面会列出支持的操作。
  4. 在这个操作的注册表项下,会有关于如何执行命令以实现所需操作的详细信息。

所有这些注册表键都是由安装程序放进去的。当你关联一个文件类型时,其实是在改变第二步中的查找方式。

补充:我之前没提到的是,只要你能编辑注册表并提供合适的命令行,就没有什么可以阻止你为特定文件类型添加缺失的操作。

撰写回答