Ich kenne eine ähnliche Frage zu diesem: Pdf.js: rendering a pdf file using a base64 file source instead of url. Diese Frage wurde von Codetoffel ehrfürchtig beantwortet, aber meine Frage ist anders, dass mein PDF über einen RESTful-Aufruf meiner Web-API-Implementierung abgerufen wird. Lassen Sie mich erklären ...PDF.JS: Render PDF mit einem ArrayBuffer oder Blob anstelle von URL
Zunächst ist hier eine grundlegende Art und Weise Pdf.js zu verwenden, um ein PDF über eine URL zu öffnen:
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});
});
});
Dies funktioniert gut, aber ich bin mit Winkel- und seine $resource
Service Stellen Sie die Anforderung für das PDF über meine RESTful Web API. Ich weiß, dass PDF.JS es mir erlaubt, die Übergabe der URL als Zeichenfolge in der PDFJS.getDocument-Methode (oben) durch ein DocumentInitParams
-Objekt zu ersetzen, das definiert ist. Mit der DocumentInitParams Objekt funktioniert wie folgt:
var docInitParams = {
url: "/api/path/to/my.pdf",
httpHeaders: getSecurityHeaders(), //as needed
withCredentials: true
};
PDFJS.getDocument(docInitParams).then(function (pdf) {
...
});
Dies funktioniert auch, aber es funktioniert um mein Eckige $resource
von mir erfordert die api URL zu konstruieren. Aber das ist in Ordnung, weil PDFJS mir erlaubt es die PDF-Daten direkt zu geben, anstatt es eine URL in das PDF zu geben, wie folgt:
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) {
...
});
});
Dies derjenige ist, kann ich nicht scheinen, zu arbeiten. Ich kann die myService.$gtPdf
Methode, um die Daten als blob
oder als arraybuffer
zurückgeben, aber keiner funktioniert. Ich habe versucht, die arraybuffer zurückgegebenen Daten auch zu Uint8Array
zu konvertieren, aber ohne Erfolg.
Ich bin mir nicht sicher, was ich noch versuchen könnte und könnte wirklich einen Tipp verwenden.
Wie bekomme ich die von meinem Dienst zurückgegebenen Daten zur Arbeit mit PDFJS?
Vielen Dank im Voraus.
Dank! Ich dachte, ich brauche einen PDF.JS-Experten, aber jemand mit besserem Angular-Wissen war wirklich der Schlüssel. Ich habe bereits transformResponse verwendet, aber nicht richtig, da ich die Ressource so behandelte, als wäre es die Antwort. Sobald Sie darauf hingewiesen haben, ist alles andere in Position gekommen. – witttness
Hallo, was machst du mit dem pdf in der.dann um das Dokument in die viewer.html zu laden? – toddmo
Wenn Sie dies mit dem Standard Viewer.html verwenden möchten, verwenden Sie 'PDFViewerApplication.open (myPdf);'. –