Pdf.js: PDFJS.getDocument funktioniert nicht

Erstellt am 31. Dez. 2014  ·  12Kommentare  ·  Quelle: mozilla/pdf.js

Ich führe eine Grails-App auf dem lokalen Host aus (von dem ich weiß, dass es ein Problem mit pdf.js und dem lokalen Dateisystem gibt) und anstatt eine Datei zu verwenden: url, von der ich weiß, dass sie fehlschlagen würde, übergebe ich ein typisiertes Javascript-Array und es ist scheitert immer noch. Um richtig zu sein, sagt es mir nichts anderes als "Warnung: Falschen Arbeiter einrichten". und dann tut es nichts.

this.base64ToBinary = function(dataURI) {
        var BASE64_MARKER = ';base64,';
        var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
        var base64 = dataURI.substring(base64Index);
        var raw = window.atob(base64);
        var rawLength = raw.length;
        var array = new Uint8Array(new ArrayBuffer(rawLength));

        for(i = 0; i < rawLength; i++) {
        array[i] = raw.charCodeAt(i);
        }
        return array;
    };

PDFJS.disableWorker = true; // due to CORS

// I convert some base64 data to binary data here which comes back correctly
var data = utilities.base64ToBinary(result);

PDFJS.getDocument(data).then(function (pdf) {
         //nothing console logs or reaches here
         console.log(pdf);
}).catch(function(error){
//no error message is logged either
            console.log("Error occurred", error);
        });

Ich frage mich, ob ich es einfach nicht richtig eingestellt habe? Kann ich diese Bibliothek nur auf der Clientseite verwenden, indem ich nur pdf.js einfüge, oder muss ich auch viewer.js einschließen? und ich habe auch eine Kompatibilitätsdatei bemerkt ... die Einrichtung ist nicht sehr klar und dieses Beispiel http://jsfiddle.net/epistemex/LUNaJ/ funktioniert und meines nicht und ich verstehe den Unterschied nicht. Auch wenn ich die in diesem Beispiel angegebene URL verwende, sagt sie dasselbe.

screen shot 2014-12-31 at 11 59 17 am

1-other 4-information-requested

Hilfreichster Kommentar

"Das hilft nicht, wenn der Name von pdf.js geändert wird oder Teil der kombinierten Datei ist." wahr, aber abgesehen von meinen eigenen Problemen mit der Verwendung von Gralen sollten Sie sie trotzdem durchlaufen, um die Standardmethode genauer zu machen. Es ist voller Löcher.

Alle 12 Kommentare

Ich habe diese Ausgabe mit einigen Updates umfassender gemacht. Bitte lassen Sie mich wissen, wenn Sie etwas Licht ins Dunkel bringen können. Nichts trifft auch die Fehlerfunktion und alles, was ich in meiner Konsole sehe, ist das, was Sie im Screenshot sehen.

Wir können nicht helfen, bis wir das vollständige Beispiel sehen und eine Möglichkeit haben, das Problem lokal zu reproduzieren. Bitte lesen Sie https://github.com/mozilla/pdf.js/blob/master/CONTRIBUTING.md und stellen Sie auf Anfrage weitere Informationen bereit.

@yurydelendik Wie soll ich dir das bringen, das Geigenbeispiel funktioniert, aber der exakt gleiche Code funktioniert nicht in meiner Umgebung ... daher kann ich ihn nicht für dich reproduzieren ... das Beste, was mir einfällt, ist das ich kann mit dir einen google hangout oder screenhero machen, um es dir zu zeigen.

Könnt ihr mir wenigstens ein paar Möglichkeiten nennen?

Nur Vermutung (aus Erfahrung):

  • Legacy-Webkit/Javascript-Engine (dies wird normalerweise durch Hinzufügen von compatible.js behoben)
  • alte PDF.js-Version (bitte verwenden Sie die freigegebene Version oder npm/bower pdfjs-dist)
  • falsche Konfiguration für disableWorker/workerSrc
  • einfacher Fehler des Problemmelders/Entwicklers

was ist pdf.worker.js?

Ich verwende die neuste Version. Gibt es auch eine Dokumentation zu disableWorker/workerSrc?

pdf.worker.js ist die Hauptdatei, die das PDF-Parsing durchführt (außerhalb des Hauptthreads der Seite). Wenn disableWorker=true, wird es automatisch in die Hauptseite geladen (vom workerSrc-Speicherort) und blockiert die Benutzeroberfläche für PDF-Parsing-Anforderungen. Siehe https://github.com/mozilla/pdf.js/blob/master/src/display/api.js#L65

ahhh ok, ich habe herausgefunden, was das Problem ist ... Sie sollten dies wahrscheinlich in der Dokumentation vermerken oder klarstellen. Wenn Sie also workerSrc nicht angeben, versuchen Sie herauszufinden, was es ist, indem Sie das letzte Skript-Tag im Kopf der Anwendung verwenden, um es zu laden, aber was ist, wenn die App Grails ist oder einen kombinierten Datei-URI bereitstellt? Sie können auch nicht zuverlässig davon ausgehen, dass das letzte Skript-Tag die richtige Quelle hat. Wenn Sie dies auf die richtige Weise tun möchten, müssen Sie alle Skript-Tags im Kopf durchlaufen, um in jeder Quelle nach pdf.js zu suchen, und dann die richtige Quelle verwenden, anstatt die letzte zu verwenden.

Ich persönlich weiß nichts über Grale. Für diese Fälle haben wir workerSrc konfigurierbar.

Sie müssten alle Skript-Tags durchlaufen

Das hilft nicht, wenn der Name pdf.js geändert wird oder Teil der kombinierten Datei ist.

Schließen als ungültig.

"Das hilft nicht, wenn der Name von pdf.js geändert wird oder Teil der kombinierten Datei ist." wahr, aber abgesehen von meinen eigenen Problemen mit der Verwendung von Gralen sollten Sie sie trotzdem durchlaufen, um die Standardmethode genauer zu machen. Es ist voller Löcher.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen