2015-07-04 29 views
0

我正在生成一个Windows商店应用程序(使用Javascript)生成PDF。我将其转换为base64,然后将其保存到文件(如果我想)。这工作正常。如何直接从Windows 8商店应用程序打印PDF(javascript)

(PDF格式是一个页面文件(〜30KB)与文本,矢量图形和一个小图像),而不必打开它

现在我想能够直接从应用程序打印此PDF在单独的应用程序中。当然,我一直在进行大量的搜索,但是我所遇到的信息似乎从未起作用。它要么是错误的语言,不能做我正在寻找的东西,或者只是不起作用。微软的文档也很模糊,缺乏像样的例子。

无论如何,从我的理解你可以实际渲染一个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

好吧,我想通了,如何保存:

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') }); 
       }); 
      }); 
     }); 
    }); 
}); 

为什么这些seeminlgy简单的事情要这么复杂?

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

但是我真正关心的是:当我打印一张图片时,它总是为页面增加2厘米的边距。 PDF图像已经有了自己的利润空间,现在它已经翻了一番。无论如何,2厘米都太过分了。我找不到任何可以改变这种情况的设置。

所以:有谁知道如何改变从Windows商店应用程序打印时的边距?

+0

您好,我正在努力做到这一点,你有我可以参考的代码示例。这将非常感激。另外,在保证金问题上有什么好运? – ctrlplusb

相关问题