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 中使用它。我还阅读了 WPF 不支持 EMF 格式。我想我会将每个 EMF 渲染为位图,然后打印它们。但是我报告中的文字很模糊,我没有任何运气来清理它。

从一个包含 EMF 字节的流开始,我知道它会用 PrintDocument 清晰呈现,我测试尝试保存到文件。我提供的任何设置似乎都不会保存清晰的文本。

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

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

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

4

1 回答 1

0

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

于 2012-06-13T21:49:07.290 回答