推荐我一个生成打印预览和打印的解决方案

时间:2014-05-31 22:54:18

标签: c++ winapi printing print-preview ole-automation

引言及相关资料:

我正在维护一个旧的应用程序,我需要实现基于从数据库计算的数据生成报告的功能。用户还必须有一个打印文件的附加选项(用户必须能够选择打印机,并且必须能够看到打印预览)。

为了提高我获得满意答案的机会,请允许我通过一个小“示例”进一步澄清问题:

  • 用户按下按钮 - >应用程序计算数据//完成

  • 应用程序创建文件并用结果填充它; //完成

  • 用户获知已生成报告; //完成

  • 用户按下另一个要打印的按钮; //被困在这里!

  • 弹出打印预览并运行打印对话框。 //被困在这里

  • 用户启动打印对话框,选择打印机,应用程序打印文件;

应用程序使用原始C++(无WinAPI)在MFC中编码。我正在使用Windows XP。

问题:

我能够成功使用 OLE自动化生成/保存 Word Excel 报告,但我无法创建打印预览这与Word将创建的打印预览完全匹配。

如果我使用 OLE自动化来显示 Excel的打印对话框/打印预览,则可能会出现以下问题:

用户只需点击“关闭打印预览”,或者只需关闭打印属性表(请参见下图)并返回可能危及文档数据的文档

enter image description here

我的雇主不喜欢这样(他们没有软件工程/开发背景,所以无论我说什么它最终会成为“风中的回声”......)他们希望我的打印预览匹配< strong>完全打印预览Word生成。

因此,我需要一个为用户生成打印预览的解决方案,其方式与Word将创建的打印预览完全匹配。此外,用户应该能够才能看到< / strong>这是怎么回事,但不能从我的应用程序中打开文件。用户应该能够选择将打印文件的打印机。

类似于图片中的实现会很好。

问题:

介绍性说明:

这个问题太宽泛,无法在一篇文章中回答,所以我必须限制自己只是为了寻求建议/一般概念/指向正确的方向。

实际问题:

我使用 OLE自动化 Excel / Word 文件尽我所能,但正如您所看到的,生成打印预览时出现问题,因此以下内容问题:

  1. 由于这是我第一次处理这类任务,你能否推荐我正确处理它的方法(当然是一般概念)?

  2. 是否有可能解决我的打印问题(例如向{em> Word / Excel 发送WM_PRINTCLIENT消息或类似内容)?

  3. 备注:

    再一次,我意识到这个问题太广泛了,所以只要给我一般概念/指针,所以如果我遇到困扰,我可以发布单独的问题。

    我不需要使用 Word / Excel OLE自动化,这是我目前的选择。

    如果你能推荐更好的解决方案,我很乐意接受。 我不想使用库。

    如果需要其他信息,请询问,我将编辑我的帖子。

1 个答案:

答案 0 :(得分:1)

当用户点击打印按钮时,您需要打开一个对话框,该对话框将包含一个显示默认打印机预览的控件和三个用于选择另一个打印机,打印和退出的按钮。

预览控件可以是一个静态控件,其中WM_PAINT处理程序将绘制预览(替代方案:一个Web浏览器控件,它输入了html文本或一个RichText控件,它输入了RTF文本,但是你受到限制通过这些控制的功能)。

  

Quote:打印预览   并不是那么特别。它只是意味着你必须渲染到屏幕   (或位图)否则将呈现给打印机DC的内容。这个   主要意味着使用页面大小,并提供UI控件   上一页/下一页。

This SO Answer详细描述了绘制预览所需的工作。

This CodeProject article有一些简单的打印预览代码;它在简单的MFC中,不应该太难转换为普通的C ++ / WinAPI。