我知道一个类似的问题:Pdf.js:使用base64文件源而不是URL呈现pdf文件。那个问题由Codetoffel令人惊叹地回答了,但我的问题与此不同,在于我的PDF是通过对我的Web API实现进行RESTful调用来检索的。让我解释一下...
首先,这里是使用PDF.JS通过URL打开PDF的基本方法:
PDFJS.getDocument("/api/path/to/my.pdf").then(function (pdf) {
pdf.getPage(1).then(function (page) {
var scale = 1;
var viewport = page.getViewport(scale);
var canvas = document.getElementById('the-canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
page.render({canvasContext: context, viewport: viewport});
});
});
这种方法很好,但是我正在使用 Angular,并且使用其 $resource
服务通过我的 RESTful Web API 请求 PDF 文件。我知道 PDF.JS 允许我用一个DocumentInitParams
对象替换在上面的 PDFJS.getDocument 方法中传递 URL 字符串,该对象定义在这里。使用 DocumentInitParams 对象的方法如下:
var docInitParams = {
url: "/api/path/to/my.pdf",
httpHeaders: getSecurityHeaders(), //as needed
withCredentials: true
};
PDFJS.getDocument(docInitParams).then(function (pdf) {
...
});
这种方法也可以使用,但是它要求我构造API URL以绕过我的Angular$resource
。但是这没关系,因为PDFJS允许我直接提供PDF数据而不是提供PDF的URL,如下所示:
var myPdf = myService.$getPdf({ Id: 123 });
//It's an Angular $resource, so there is a promise to be fulfilled...
myPdf.$promise.then(function() {
var docInitParams = {
data: myPdf
};
PDFJS.getDocument(docInitParams).then(function (pdf) {
...
});
});
这是我无法使其工作的部分。我可以告诉myService.$gtPdf
方法以blob
或arraybuffer
的形式返回数据,但两者都不起作用。我还尝试将返回的arraybuffer转换为Uint8Array
, 但没有成功。
我不确定还能尝试什么,真的需要提示。
如何让从服务中返回的数据与PDFJS一起工作?
提前感谢您的帮助。
PDFViewerApplication.open(myPdf);
。 - Rob W