我正在使用WPF并且需要让用户设置一些与打印相关的选项,如打印机和打印机属性(例如,papertray,横向/纵向,双面打印等) . 我知道PrintDialog类可以获取PrintQueue和PrintTicket对象 . 但是,我需要创建自定义解决方案,无法显示PrintDialog . 我设法获得可用的PrintQueue对象,并让用户选择一台打印机 . 我正在努力打印机属性 . 我的问题是:如何显示用户可以为所选PrintQueue设置打印机属性的对话框(当用户单击WPF PrintDialog中的“属性”按钮时显示的对话框) .
2 回答
找到以下代码 here (减去
Window_Loaded
事件) . 我测试了它,它看起来像一个魅力 . 显然,在显示对话框之前,您必须在PrinterSettings
对象中设置打印机名称 .希望这对你有用:
如果您定位x86编译并从x64机器运行,则Pwninstein的代码将无效:当分配
devModeData
时,DocumentPropreties
将始终失败并返回sizeNeeded
为-1,并且LastError
代码为13 .要解决此问题,请确保将目标设为AnyCPU,或者只是将对
DocumentPropreties
的调用更改为以下内容:使用
IntPtr.Zero
而不是指向DevMode结构的正确指针看起来不对,但是对DocumentProperties的第一次调用不会尝试修改该位置的内存 . 调用返回的唯一数据是存储表示打印驱动程序内部参数的设备模式数据所需的内存大小 .参考: