4

我有一个使用 HTML 和 JavaScript 构建的 Windows 8 应用程序。它有一个 ListView 显示从 JSON 数据源生成的位置的动态列表。

我正在使用MSDN 示例中的 Print Contract 代码(显示如何打印具有静态内容的页面)来实现此应用程序的打印功能。打印时,ListView 中的列表仅显示一半。

当内容很大时,如何从 ListView 打印完整列表并使其分布在多个页面上?

4

1 回答 1

1

这里的技巧是向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

于 2013-02-19T17:18:48.507 回答