打印从Windows 8(HTML + JS)应用程序中的JSON数据源获取的ListView项

时间:2012-10-23 03:19:03

标签: windows-8 winjs

我有一个使用HTML& amp; JavaScript的。它有一个ListView,显示从JSON数据源生成的动态列表。

我正在使用Print Contract code from a MSDN sample (that shows how to print a page with static content)为此应用实施打印功能。列表中只有一半列表在打印时显示。

如何从ListView&中打印完整列表?当内容很大时,它会分散在多个页面上吗?

1 个答案:

答案 0 :(得分:1)

这里的技巧是向MSApp.getHtmlPrintDocumentSource method提供正确表示您要打印的内容的文档,该文档不一定与页面上显示的内容相同。

您引用的示例只是将当前的文档对象传递给getHtmlPrintDocumentSource,这是最简单的打印方式,但正如您所注意到的,可能无法准确提供您想要的结果。

Kraig Brockschmidt's excellent (and free) ebook on HTML and JavaScript Windows Store apps第15章所述,自定义输出的一种简单方法是为打印媒体类型添加媒体查询,并使用CSS修改页面的输出,如下所示: / p>

@media print {
    .win-backbutton {
        display: none;
    }

    .watermark {
        display: none;
    }

    .titlearea {
        font-size: xx-large;
    }
}

然而,这不会解决您所面临的问题。在您的情况下,可能最有效的方法是创建一个单独的页面,提供更易于打印的输出。

例如,根据打印合同示例中的方案4,如果我在应用程序的根目录中放置一个名为print.html的HTML页面,我可以使用以下代码引用它(请注意ms-appx:/ // scheme,指的是我的app包中的内容):

// 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);

现在,当调用devices charm时,我的备用内容页面将作为打印源而不是当前页面提供。您可以让备用页面加载来自JSON源的内容,并以打印机友好的方式呈现它,这可能与内容在页面上的显示方式不同。

有关Windows应用商店应用开发的详细信息,请注册Generation App