2012-06-28 34 views
15

我刚刚开始使用pdf.js,我试图从原始pdf数据中加载pdf文件。我看到了代码:使用pdf.js来显示原始数据的pdf

PDFJS.getPdf('cwpdf.pdf', function getPdfHelloWorld(data) { 
    ... 
} 

但我想知道是否有任何方法可以从原始pdf数据而不是从文件名加载pdf。这可能吗?

回答

5

我把一些完整的代码,并能够找到与下面的解决方案的问题:

var int8View = new Uint8Array(...); //populate int8View with the raw pdf data 
PDFJS.getDocument(int8View).then(function(pdf) { 
} 

当使用这种解决方案我跑到其他用户看到的问题(@MurWade和@ user94154) - stream must have data错误消息。它看起来像这个问题是在下面一行:

var int8View = new Uint8Array(...); 

包含数据的阵列没有得到正确创建的,因为数据不是预期的格式。因此,这条线适用于某些情况,但在一般情况下可能不起作用。

我已经把一个完整的解决方案,这似乎更好地工作。它加载一个PDF文件,并将其转换为原始PDF流。这仅仅是为了测试目的,在现实世界的例子中,PDF流将可能以不同的方式被接收。您可以在调试器中检查流,并将其显示为纯文本。以下是使此示例工作的代码的关键代码。而是将原始PDF流转换为数组,将其转换为数据。

var docInitParams = { data: pdfraw }; 

然后继续加载数据。以下是如何加载标准原始PDF流并显示它的完整工作示例。我曾以PDF JS Hello World样本作为起点。请在评论中告诉我,如果有任何澄清是必要的。

'use strict'; 
 

 
PDFJS.getDocument('helloworld.pdf').then(function(pdf) { 
 

 

 
    pdf.getData().then(function(arrayBuffer) { 
 
    var pdfraw = String.fromCharCode.apply(null, arrayBuffer); 
 

 
    var docInitParams = { 
 
     data: pdfraw 
 
    }; 
 
    PDFJS.getDocument(docInitParams).then(function(pdfFromRaw) { 
 
     pdfFromRaw.getPage(1).then(function(page) { 
 
     var scale = 1.5; 
 
     var viewport = page.getViewport(scale); 
 

 
     var canvas = document.getElementById('the-canvas'); 
 
     var context = canvas.getContext('2d'); 
 
     canvas.height = viewport.height; 
 
     canvas.width = viewport.width; 
 

 
     var renderContext = { 
 
      canvasContext: context, 
 
      viewport: viewport 
 
     }; 
 
     page.render(renderContext); 
 
     }); 
 
    }); 
 
    }); 
 
});

+0

不错,接受这个答案,因为它似乎比我原来的更完整! – Swiss

+0

谢谢!让我知道我是否可以做任何事情来改进它。 –

+0

@ user94154,上述解决方案是否回答您的问题? –

2

那么,因为没有人回答我会发布我的发现。我发现是的,可以从原始数据加载pdf文件。这可以通过使用UInt8Array填充数据来代替PDF文件存储位置。

示例代码做,这是下面:

var int8View = new Uint8Array(...); //populate int8View with the raw pdf data 
PDFJS.getDocument(int8View).then(function(pdf) { 

} 
+0

这对我没有工作。我得到的错误'流必须有数据' – MurWade

+0

我得到了同样的错误@MurWade。我会*爱*有固定的。 – user94154

+0

http://jsperf.com/string-to-uint8array – user94154