如何设置PowerPoint.PrintOptions?解决ActivePrinter属性只读无法指定打印机的问题
指定PowerPoint Interop打印的目标打印机
嘿,这个坑我踩过!确实,PowerPoint Interop里的PrintOptions.ActivePrinter是只读属性,没法直接赋值来切换打印机,但咱们有两种靠谱的解决办法:
方法一:直接给PrintOut方法传打印机参数
最简便的方式就是利用PrintOut本身的可选参数Printer,直接把目标打印机的名称传进去就行,完全不用碰PrintOptions。修改后的代码如下:
using Microsoft.Office.Interop.PowerPoint; Application ppt = new Application(); Presentation doc = ppt.Presentations.Open(file); ppt.Activate(); // 直接在PrintOut方法中指定打印机名称 doc.PrintOut(Printer: "Adobe PDF"); ppt.Quit();
这里要注意:打印机名称必须和系统中显示的完全一致(包括大小写和空格),比如如果你的打印机显示是Adobe PDF (副本1),就得写完整的名称。
方法二:临时修改系统默认打印机(谨慎使用)
如果你的场景需要多次打印,想全局设置默认打印机,可以通过Windows API临时切换默认打印机,打印完成后再恢复原设置。这种方法会改变系统全局的默认打印机,所以一定要记得恢复,避免影响用户后续操作:
首先添加Windows API的引用:
using System.Runtime.InteropServices; [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool SetDefaultPrinter(string printerName);
然后修改打印逻辑:
using Microsoft.Office.Interop.PowerPoint; Application ppt = new Application(); Presentation doc = ppt.Presentations.Open(file); ppt.Activate(); // 保存当前默认打印机 string originalPrinter = ppt.ActivePrinter; // 设置目标打印机为默认 SetDefaultPrinter("Adobe PDF"); // 执行打印 doc.PrintOut(); // 恢复原来的默认打印机 SetDefaultPrinter(originalPrinter); ppt.Quit();
额外注意事项
- 如果你不确定打印机的准确名称,可以先通过
ppt.ActivePrinter获取当前打印机的名称格式,或者枚举系统内的打印机列表来确认。 - 如果是在服务端或者无界面环境下运行,要确保PowerPoint进程拥有访问打印机的权限,否则可能会打印失败。
内容的提问来源于stack exchange,提问作者flonder
相关产品推荐
相关产品推荐

