快速入门:从你的应用打印 (HTML)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
本快速入门介绍在 Windows 应用商店应用中添加打印功能的最简单方法。
有关此过程的概述,请观看此简短视频。
从 Windows 应用商店应用打印的最简单方法是让应用使用 Windows 打印。为此,你的应用必须:
在每次显示你希望用户能够从其打印的应用时注册“打印”合约。
注册“打印”合约意味着获取一个 PrintManager 对象、创建一个 PrintTask 对象并处理打印事件。
提供要打印的格式化内容。
在本快速入门中显示的默认打印体验是让 Windows 打印你的应用的屏幕显示。
注意 只能将自定义的打印功能(例如,打印特定页面或自定义打印设置)添加到使用 C++、C# 或 Visual Basic 和 XAML 的 Windows 应用商店应用中。有关向应用中添加自定义打印功能的详细信息,请参阅打印 (XAML)。
先决条件
- 你必须熟悉 HTML、JavaScript、Windows 事件和事件处理。
- 必须安装了 Microsoft Visual Studio。
- 必须安装了打印机。
- 你必须有一个你希望向其添加打印的应用。如果你没有自己的应用,则可以下载 PrintSample 示例应用并使用该应用。注意 本快速入门中的示例位于 PrintSample 示例应用。
说明
1. 打开应用的源代码进行编辑
此过程介绍如何打开 PrintSample 示例应用中的 PrintSampleJS 应用。如果你正在使用你自己的应用,则请在 Visual Studio 中打开你自己的应用,并跳到下一步。
- 打开 PrintSample 示例应用并将 JavaScript 示例下载到你的计算机。
- 在 Visual Studio 中,单击“File”>“Open Project”并导航到包含你在上一步中下载的示例应用的解决方案文件的文件夹。
- 选择 PrintSampleJS 解决方案文件,然后单击“打开”。
2. 生成并测试应用
- 单击“生成”>“生成解决方案”来生成你要在其上工作的应用。确保屏幕底部的“输出”窗格中没有错误消息。
- 单击“调试”>“开始执行(不调试)”。****
- 请确认,在几秒后,屏幕中会显示 PrintJSSample 应用。
- 如果应用运行且未显示错误,请返回到 Visual Studio,并单击“调试”>“停止调试”。****
3. 注册 Windows 打印
此时,你的应用应该显示一个包含某些内容的屏幕。
在你的应用中添加打印的第一步是注册打印合约。你的应用必须在你希望你的用户能够从其打印的每个屏幕上执行此操作。
注意 仅显示给用户的屏幕可以注册打印。如果你的应用的一个屏幕已注册打印,则该屏幕必须取消注册打印(当该屏幕存在时)。如果该屏幕被另一个屏幕所替换,则当下一个屏幕打开时,它必须注册新的打印合约。
注册打印合约意味着获取一个 PrintManager 对象并为 PrintTaskRequested 事件定义处理程序。
对于你要从其打印的应用中的每个屏幕,请添加以下代码,以便在打开该屏幕时该代码将运行。在 PrintSampleJS 示例应用中,这是在 WinJS.UI.Pages.define 函数(调用它可创建屏幕)的 members 参数的 ready 成员中完成的。
var printManager = Windows.Graphics.Printing.PrintManager.getForCurrentView(); printManager.onprinttaskrequested = onPrintTaskRequested;
注意 你可以在一个单独的函数中包含此代码,就像 PrintSampleJS 示例应用那样。
为该屏幕添加打印任务事件处理程序。你的应用中的每个屏幕可能会需一个不同的函数(例如,如果需要以不同的方式格式化每个屏幕的内容来进行打印)。
此 PrintSampleJS 应用包含一个完成处理程序(在此处显示)。最好对完成事件进行处理,因为,那样你的应用可以让用户知道是否发生了错误并提供可能的解决方案。同样,你的应用可以使用完成事件来指示用户在打印作业成功之后要采取的后续步骤。
function onPrintTaskRequested(printEvent) { var printTask = printEvent.request.createPrintTask("Print Sample", function (args) { args.setSource(MSApp.getHtmlPrintDocumentSource(document)); // Register the handler for print task completion event printTask.oncompleted = onPrintTaskCompleted; }); }
function onPrintTaskCompleted(printTaskCompletionEvent) { // Notify the user about the failure if (printTaskCompletionEvent.completion === Windows.Graphics.Printing.PrintTaskCompletion.failed) { WinJS.log && WinJS.log("Failed to print.", "sample", "error"); } }
如上所述生成并测试应用。
4. 从你的应用打印
在修改并生成你的应用之后,在调试程序中测试新功能。
- 单击“调试”>“启动调试”。****
- 请确认,在几秒后,屏幕中会显示 PrintJSSample 应用。
- 从屏幕的右边缘轻扫可显示多个超级按钮。
- 选择“设备”超级按钮。
- 选择打印机。随即会显示“打印”窗口。
- 单击打印窗口中的“打印”按钮以打印当前屏幕中的内容。
- 查看打印的结果。
摘要和后续步骤
在本快速入门中,你在你的应用中添加了 Windows 打印,而没有修改用户与你的应用交互的方式或你的应用格式化其内容以进行打印的方式。
在此处你可以探索某些更加高级的打印功能。在如何使用应用内打印按钮打印中,你将添加用户可以单击的打印按钮以通过你的 Windows 应用商店应用打印。
注意
你可以使用 JavaScript 函数 window.print() 打印你的应用的内容,而 window.print() 旨在通过使用默认的打印体验打印屏幕上显示的内容。由于 Windows 应用商店应用屏幕不会始终产生良好的打印输出,因此调用 window.print() 可能不会是最好的方法。为了获得最佳客户体验,我们建议使用 Windows 运行时函数并注册打印合约(就像这些主题所演示的那样)。
而若要查看 Windows 应用商店应用中提供的更多打印方案,请参阅 PrintSample 示例应用。