扩展打印机属性

时间:2012-06-13 20:25:27

标签: c# wpf winforms printing

我正在使用WinForms应用。我有一个RDLC报告,将在11x17上打印然后折叠(打印机支持折叠)。我正在渲染到EMF并绘制到PrintDocument的页面。除折叠外,这种方法很好。

我想要做的是存储使打印机折叠的设置。用户将从下拉列表中选择预设,应用程序将选择打印机,纸张尺寸,纸盘,是否双面打印以及是否折叠。存储PrinterSettings对象涵盖了大部分内容,但不保存折叠选项。

我首先尝试存储/检索我读到的名为DEVMODE的内容。供参考:http://nicholas.piasecki.name/blog/2008/11/programmatically-selecting-complex-printer-options-in-c-shar/。我发现即使我有特定于驱动程序的额外数据,但无论我更改了哪些特定于驱动程序的设置,所有字节都为0。我不确定我在哪里出错,但我放弃了它并查看了WPF中的打印功能。

我发现我可以为我的设置配置PrintTicket,存储它,然后再检索它。保存设置似乎有点费解,但我认为我有它的工作。至少它似乎在PrintDialog中正确显示。但是,我现在不想弄清楚如何打印我的报告。

据我所知,我不能从WinForms打印中获取PrintDocument并在WPF中使用它。我也读过WPF不支持的EMF格式。我以为我会将每个EMF渲染成位图,然后打印出来。但是我的报告中的文字是模糊的,我没有运气清理它。

从包含EMF字节的流开始,我知道它将使用PrintDocument进行大幅渲染,我测试尝试保存到文件。似乎没有我提供的设置可以保存清晰的文字。

var pageImage = new Metafile(stream);
pageImage.Save(filename);

这一切只是为了增加折叠能力。我完全走错了路吗?我不知道这应该怎么这么难。我想我要么找到另一种保存/恢复自定义打印机设置的方法,要么我需要一种更好地渲染这些EMF文件的方法。

我也尝试将报告直接渲染为BMP格式,质量也很差。

1 个答案:

答案 0 :(得分:0)

我尝试了一些略有不同的东西,它有效!我重用了原始的PrintDocument代码并打印到XPS文件中。然后我使用我的PrintTicket打印了XPS文件,它工作正常。