WinJS转发自定义对象打印功能

时间:2016-04-14 10:14:15

标签: javascript printing win-universal-app winjs

我在我的应用程序中使用WinJS并尝试打印一些内容。根据本教程https://dzone.com/articles/windows-8-print-contract-%E2%80%93制作了我的打印机课程。

function registerForPrintContract(participiantData) {
    var printManager = Windows.Graphics.Printing.PrintManager.getForCurrentView();
    printManager.addEventListener("printtaskrequested", onPrintTaskRequested, false);
}

function onPrintTaskRequested(printEvent) {
    var printTask = printEvent.request.createPrintTask("Print Example", function (args) {
        printCurrentPage(args);

        printTask.oncompleted = onPrintTaskCompleted;
    });
}

function printCurrentPage(args) {
    var docHtml = document.createDocumentFragment();
    docHtml.appendChild(createDocumentContent());
    args.setSource(MSApp.getHtmlPrintDocumentSource(docHtml));   
}

function createDocumentContent() {
    var container = document.createElement("div");
    container.innerHTML = "<h2>" + firstname + " " + lastname + "</h2>" +
                          "<h4>" + emailaddress1 + "<h4>";
    return container;
}

function showPrintUI() {
    Windows.Graphics.Printing.PrintManager.showPrintUIAsync();
}

我的问题是我不知道如何将一些对象数据转发到createDocumentContent()函数。在这个例子中,我输入了firstname,lastname和email。那些我无法从html页面获得的数据我需要在打印按钮上发送它们。

我看到的所有示例都是关于打印当前页面或通过查询DOM从我们可以从HTML页面获取的数据创建新内容,没有我可以发送自定义对象的示例。 这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

  

我的问题是我不知道如何将一些对象数据转发到createDocumentContent()函数。在这个例子中,我输入了firstname,lastname和email。那些我无法从html页面获得的数据我需要在打印按钮上发送它们。

您的意思是想要将"<h2>"+firstname + " " +lastname+"</h2>"+"<h4>" + emailaddress1 + "<h4>"的html输出放到打印页面上吗?

在Windows应用商店应用开发中,innerHTML的行为已发生变化。 请参阅HTML and DOM API changes list innerHTML部分:

  

内容经过过滤,因为它是由toStaticHTML方法处理的

但WinJS提供了一种可用于注入HTML的方法。

以下是此方法文档的链接:WinJS.Utilities.insertAdjacentHTML

这是一个代码片段,显示了一个简单的方法:

function createDocumentContent() {
    var obj = {
        firstname: "winffee",
        lastname: "xia",
        emailaddress1:"test@126.com"
    }
    var htmlString = "<h2>" + obj.firstname + " " + obj.lastname + "</h2>" +
                      "<h4>" + obj.emailaddress1 + "<h4>";
    var container = document.createElement("div");
    WinJS.Utilities.insertAdjacentHTML(container, "beforeend", htmlString);
    return container;
}