Hallo,
Ich versuche, die pdf.js-Bibliothek in die Electron-App zu integrieren. Der Hauptgrund dafür ist, einen PDF-Viewer in der App zu haben und das Dokument auszudrucken.
Zunächst habe ich versucht, die Bibliothek auf zwei Arten zu integrieren:
Ich habe folgende Fragen:
</div>
<canvas id="theCanvas"></canvas>
<div>
PDFJS.getDocument(pdfPath).then(function getPdfHelloWorld(pdf) {
pdf.getPage(1).then(function getPageHelloWorld(page) {
var scale = 1.5;
var viewport = page.getViewport(scale);
var canvas = document.getElementById('theCanvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
});
});
Dies ist jedoch nur ein Teil von dem, was ich will. Ich möchte die Viewer-Steuerelemente wie in viewer.html. Also habe ich versucht, ein neues Fenster mit direkt viewer.html wie folgt zu öffnen:
var pdfPath = __dirname + '/pdfs/trial.pdf';
mainWindow.loadURL('file://' + __dirname + '/generic/web/viewer.html?file=' + pdfPath);
Ich konnte den Viewer sehen, aber beim Laden der PDF-Datei wird dieser Fehler in der Konsole ausgegeben:
Uncaught (versprochen) TypeError: PDFJS.getDocument ist keine Funktion
at Object.pdfViewOpen as open
at webViewerInitialized (file:///.../src/generic/web/viewer.js:7686:26)
Ich kann nicht nachvollziehen, was ich hier falsch mache. Ist das der empfohlene Weg? Wenn ich den gesamten Viewer in eine Leinwand oder einen Iframe einbetten möchte, wie kann ich das tun? Es wäre schön, eine API-Liste im Projekt zu haben, um bestimmte allgemeine Aufgaben wie das, was ich versuche, zu erledigen. Sorry, falls es schon da ist und ich es nicht finden kann.
Wäre sehr dankbar, wenn mir hier jemand weiterhelfen könnte.
Danke im Voraus...
Aufbau:
PDF.js-Version: 0.8.0
Das ist eine wirklich alte Version. Bereits vorgefertigte Versionen von unseren Releases (oder gulp generic
eine) funktionieren gut, mit der Ausnahme, dass Sie pdf selbst in Uint8Array laden können.
PDFJS.getDocument ist keine Funktion
Dies weist darauf hin, dass die PDF.js-Kernbibliothek ('./build/pdf.js'-Datei) nicht geladen wurde.
Danke für deine prompte Antwort Yury.
Das ist eine wirklich alte Version.
Ich bin mir nicht sicher, wie ich zu dieser alten Version gekommen bin. Ich habe nichts Besonderes gemacht als git clone git://github.com/mozilla/pdf.js.git
, um das Projekt zu bekommen. Wenn ich jedoch hier sehe, zeigt die package.json immer noch 0.8.0 an.
Bereits vorgefertigte Versionen aus unseren Releases (oder gulp generisch) funktionieren gut, mit der Ausnahme, dass Sie pdf selbst in Uint8Array laden können.
Sprechen Sie von diesem vorgefertigten Reißverschluss? .
Dies weist darauf hin, dass die PDF.js-Kernbibliothek ('./build/pdf.js'-Datei) nicht geladen wurde.
Nachdem ich gulp generisch gemacht hatte, bekam ich pdf.js und pdf.worker.js an zwei Stellen. Einer außerhalb des generischen Verzeichnisses und einer innerhalb des generischen/build/-Verzeichnisses. Ich verweise derzeit auf die Außenseite. Können Sie mir bitte Bescheid geben, wenn ich auf den falschen zeige?
Nochmals vielen Dank für die Hilfe!
die package.json zeigt immer noch 0.8.0 an.
package.json enthält nicht die erstellte Bibliotheksversion, siehe pdf.js-Datei oder PDFJS.version-Eigenschaft für die richtige Versionsnummer.
Können Sie mir bitte Bescheid geben, wenn ich auf den falschen zeige?
Beide müssen identisch sein. Sie müssen den gesamten Ordner "generic/" verwenden, damit Sie pdf.js an der richtigen Stelle haben.
siehe pdf.js-Datei oder PDFJS.version-Eigenschaft
Es sagt Version:1.4.174
Außerdem habe ich das Problem erkannt. Ich habe das richtige Zeug aus dem generischen Verzeichnis kopiert; wenn ich jedoch ein Fenster mit der URL viewer.html öffne; die Fenstereigenschaft sollte folgendes haben:
webPreferences: {
nodeIntegration: false
}
Und es kann jetzt gut geladen werden.
Danke für deine Hilfe Yury!
Hilfreichster Kommentar
Es sagt Version:1.4.174
Außerdem habe ich das Problem erkannt. Ich habe das richtige Zeug aus dem generischen Verzeichnis kopiert; wenn ich jedoch ein Fenster mit der URL viewer.html öffne; die Fenstereigenschaft sollte folgendes haben:
webPreferences: { nodeIntegration: false }
Und es kann jetzt gut geladen werden.
Danke für deine Hilfe Yury!