2012-06-13 172 views
0

我正在使用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中使用它。我也读过EMF格式在WPF中不受支持。我以为我会把每个EMF渲染成位图,然后打印出来。但是我的报告中的文字很模糊,我没有任何运气清理它。

从包含EMF字节的流开始,我知道这些字节将与PrintDocument一起呈现,我试着保存到文件中。看起来我没有提供任何设置可以保存清晰的文本。

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

所有这些只是为了增加折叠的能力。我只是完全错误的轨道?我不明白这应该如此艰难。我想我需要找到另一种方法来保存/恢复自定义打印机设置,或者我需要一种更好地呈现这些EMF文件的方法。

我也试着将报告直接渲染成BMP格式,质量也差。

回答

0

我尝试了一些稍微不同,它的工作!我重用了我的原始PrintDocument代码并打印到XPS文件。然后我使用PrintTicket打印XPS文件,并且工作正常。