【发布时间】:2014-05-31 22:54:18
【问题描述】:
简介及相关资料:
我正在维护一个旧应用程序,我需要实现基于从数据库计算的数据生成报告的功能。用户还必须有打印文件的附加选项(用户必须能够选择打印机,并且必须能够看到打印预览)。
为了提高我得到满意答案的机会,请允许我用一个小的“例子”来说明问题:
用户按下按钮 -> 应用程序计算数据; // 完成
应用程序创建文件并用结果填充它; // 完成
通知用户生成报告; // 完成
用户按下另一个为打印收费的按钮; // 卡在这里!
会弹出打印预览和运行打印对话框的选项。 // 卡在这里
用户启动打印对话框,选择打印机,应用程序打印文件;
应用程序使用原始WinAPI(没有MFC)在C++ 中编码。我正在使用 Windows XP。
问题:
我能够成功使用 OLE 自动化 生成/保存 Word 和 Excel 报告,但我无法创建打印预览 与 Word 将创建的打印预览完全匹配。
如果我使用 OLE 自动化 来显示 Excel 的 打印对话框/打印预览,可能会出现以下问题:
用户可以简单地点击“关闭打印预览”,或者可以简单地关闭打印属性表(见下图)返回到可能会破坏文档数据的文档 .
我的雇主不喜欢这样(他们没有软件工程/开发背景,所以无论我说什么最终都会成为“风中的回声”......)并且他们希望我的打印预览匹配 正是 Word 生成的打印预览。
因此,我需要一种为用户生成打印预览的解决方案,以一种与 Word 将创建的打印预览完全匹配的方式。此外,用户应该能够只能看到 这看起来如何,但无法从我的应用程序中打开文件。用户应该能够选择将打印文件的打印机。
类似于图片中的实现就可以了。
问题:
介绍性说明:
这个问题太广泛了,无法在一篇文章中回答,所以我必须限制自己只寻求建议/一般概念/指向正确的方向。
实际问题:
我在 OLE 自动化 和 Excel / Word 文件方面尽了最大努力,但正如您所见,生成打印预览时存在问题,因此如下问题:
由于这是我第一次处理此类任务,您能否推荐我处理它的正确方法(当然是一般概念)?
-
是否有可能解决我的打印问题(例如将
李>WM_PRINTCLIENT消息发送到Word / Excel 或类似的东西)?
备注:
再一次,我意识到这个问题太宽泛了,所以只给我一般概念/指示,这样如果我在某个地方遇到问题,我可以单独发布问题。
我不需要使用 Word / Excel 和 OLE 自动化,这是我目前的选择。
如果您能推荐更好的解决方案,我将很乐意接受。 我不想使用库。
如果需要更多信息,请询问,我将编辑我的帖子。
【问题讨论】:
-
您是否考虑过将文档设为只读
-
@Cheersandhth.-Alf:不,我没有,因为我是第一次解决这个问题。如果它是只读的,我将如何填充该文档?还是您的意思是在填充后将其设为只读?
-
我一直在创建文件并填充它之后。
-
@Cheersandhth.-Alf:对不起,我误解了你的评论。但即使在这种情况下,用户也可以通过单击“关闭打印预览”返回文档,这也很危险......
-
“应用程序创建文件并用结果填充它”——文件是否包含纯文本格式的报告? RTF?或数据(CSV,制表符分隔的文本,...)?您愿意自己绘制完整的报告吗?
标签: c++ winapi printing print-preview ole-automation