如何直接从Windows 8商店app(javascript)打印pdf

时间:2015-07-04 23:25:36

标签: javascript windows pdf printing windows-store-apps

我正在制作一个生成PDF的Windows商店应用程序(在Javascript中)。我将其转换为base64,然后将其保存到文件(如果我想)。这很好。

(PDF是一页文档(约30kb),带有文本,矢量图形和小图像)

现在我希望能够直接从应用程序打印此pdf,而无需在单独的应用程序中打开它。当然,我一直在做很多搜索,但我所遇到的信息似乎从未奏效。它要么是用错误的语言,要么不是我正在寻找的,要么就是没有用。此外,Microsoft文档非常模糊,缺乏正确的示例。

无论如何,根据我的理解,您实际上可以将pdf页面呈现为位图,然后将其发送到打印机。我决定尝试一下,所以我首先要做的就是将pdf保存为文件。

现在我设法创建了一个pdfPage对象,现在我应该这样做:

pdfPage.renderToStreamAsync(outputStream).done( /* Your success and error handlers */ );

outputStream应该是一个IRandomAccessStream对象,但我似乎不能实例化一个。它没有在Streams列表中显示,当我手动输入它时它不起作用......使用InMemoryRandomAccessStream似乎可以工作。

var outputStream = new Windows.Storage.Streams.IRandomAccessStream(); //this don't work?

即使outputStream很好,如何将其保存到文件?我之前已经保存了IBuffer的文件,我能以某种方式将其转换为IBuffer吗?我无法找到相关的任何信息。

另外我相信应该可以将outputStream显示为应用程序中的图像。我只能找到C#的例子。这在JS / HTML中是如何工作的?

1 个答案:

答案 0 :(得分:1)

好的,我想出了如何保存它:

Windows.Storage.ApplicationData.current.temporaryFolder.getFileAsync("mydocument.pdf").then(function (file) {
    var pdfDocument = Windows.Data.Pdf.PdfDocument;
    pdfDocument.loadFromFileAsync(file).then(function (pdf) {
        page1 = pdf.getPage(0);
        var accessStream = new Windows.Storage.Streams.InMemoryRandomAccessStream();
        page1.renderToStreamAsync(accessStream).done(function () {
            Windows.Storage.ApplicationData.current.temporaryFolder.createFileAsync("page1image.png", Windows.Storage.CreationCollisionOption.replaceExisting).then(function (file) {
                file.openAsync(Windows.Storage.FileAccessMode.readWrite).then(function (filestream) {
                    Windows.Storage.Streams.RandomAccessStream.copyAndCloseAsync(accessStream.getInputStreamAt(0), filestream.getOutputStreamAt(0)).then(function () { console.log('done') });
                });  
            });
        });
    });
});

为什么这些直截了当的事情必须如此复杂?

整个光栅化效果不佳。我的意思是得到一个像样的分辨率(600dpi)文件需要一些时间来生成。我注意到即使打印机在打印时也需要几个休息时间才能跟上。当我直接打印pdf时,这根本不会发生。你也失去了CMYK定义。

但我真正担心的是:当我打印图像时,它总是会为页面增加2厘米的边距。 pdf图像已经有了自己的边距,所以现在它已经翻了一番。无论如何,2厘米太多了。我无法在任何可以更改此设置的地方找到任何设置。

所以:有人知道如何在从Windows商店应用程序打印时更改边距吗?