我有一个使用 HTML 和 JavaScript 构建的 Windows 8 应用程序。它有一个 ListView 显示从 JSON 数据源生成的位置的动态列表。
我正在使用MSDN 示例中的 Print Contract 代码(显示如何打印具有静态内容的页面)来实现此应用程序的打印功能。打印时,ListView 中的列表仅显示一半。
当内容很大时,如何从 ListView 打印完整列表并使其分布在多个页面上?
我有一个使用 HTML 和 JavaScript 构建的 Windows 8 应用程序。它有一个 ListView 显示从 JSON 数据源生成的位置的动态列表。
我正在使用MSDN 示例中的 Print Contract 代码(显示如何打印具有静态内容的页面)来实现此应用程序的打印功能。打印时,ListView 中的列表仅显示一半。
当内容很大时,如何从 ListView 打印完整列表并使其分布在多个页面上?
这里的技巧是向MSApp.getHtmlPrintDocumentSource 方法提供一个正确表示您想要打印的内容的文档,这不一定与页面上显示的内容相同。
您引用的示例只是将当前文档对象传递给 getHtmlPrintDocumentSource,这是最简单的打印方式,但正如您所注意到的,它可能无法准确地为您提供所需的结果。
正如Kraig Brockschmidt 关于 HTML 和 JavaScript Windows Store 应用程序的优秀(免费)电子书的第 15 章所述,自定义输出的一种简单方法是为打印媒体类型添加媒体查询,并使用 CSS 修改页面,如下所示:
@media print {
.win-backbutton {
display: none;
}
.watermark {
display: none;
}
.titlearea {
font-size: xx-large;
}
}
但是,这可能不会解决您面临的问题。在您的情况下,最有效的方法可能是创建一个单独的页面,该页面提供更易于打印的输出。
例如,基于打印合同示例中的场景 4,如果我将名为 print.html 的 HTML 页面放在我的应用程序的根目录中,我可以使用以下代码引用它(注意 ms-appx:/// 方案,指的是我的应用程序包中的内容):
// set the alternate content
var alternateLink = document.createElement("link");
alternateLink.setAttribute("id", "alternateContent");
alternateLink.setAttribute("rel", "alternate");
alternateLink.setAttribute("href", "ms-appx:///print.html");
alternateLink.setAttribute("media", "print");
document.getElementsByTagName("head")[0].appendChild(alternateLink);
现在,当调用设备超级按钮时,我的备用内容页面将作为打印源提供,而不是当前页面。您可以让备用页面从 JSON 源加载内容并以打印机友好的方式呈现,这可能与页面上内容的显示方式不同。
有关 Windows 应用商店应用开发的更多信息,请注册Generation App。