ułożyła jakiś kompletny kod i był w stanie znaleźć problemu z poniższej rozwiązania:
var int8View = new Uint8Array(...); //populate int8View with the raw pdf data
PDFJS.getDocument(int8View).then(function(pdf) {
}
Przy zastosowaniu tego rozwiązania wpadłem na problem, który inni użytkownicy widzieli (@MurWade i @ user94154) - komunikat o błędzie stream must have data
. Wygląda na to, że problem jest w następujący wiersz:
var int8View = new Uint8Array(...);
Tablica zawierająca dane nie zostanie prawidłowo utworzony, ponieważ dane nie są w oczekiwanym formacie. Dlatego linia ta działa w niektórych przypadkach, ale może nie działać w ogólnym przypadku.
Połączyłem kompletne rozwiązanie, które wydaje się działać lepiej. Ładuje plik PDF i konwertuje go do nieprzetworzonego strumienia PDF. Jest to tylko do celów testowych, w rzeczywistym świecie, strumień PDF zostanie prawdopodobnie odebrany w inny sposób. Możesz sprawdzić strumień w debugerze i będzie on wyświetlany jako zwykły tekst. Poniżej znajduje się kluczowa linia kodu, aby ten przykład działał. Zamiast konwertować surowy strumień PDF do tablicy, przekonwertuj go na dane.
var docInitParams = { data: pdfraw };
Następnie kontynuuj ładowanie danych. Poniżej znajduje się pełna robocza próbka ładowania standardowego nieprzetworzonego strumienia PDF i wyświetlania go. Kiedyś jako punkt wyjścia użyłem próbki PDF JS hello world. Proszę dać mi znać w komentarzach, jeśli wyjaśnienia są konieczne.
'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);
});
});
});
});
Przyjemnie, akceptuję tę odpowiedź, ponieważ wydaje się bardziej kompletna niż moja oryginalna! – Swiss
Dzięki! Daj mi znać, jeśli mogę zrobić cokolwiek, aby to poprawić. –
@ user94154, czy powyższe rozwiązanie odpowiada na twoje pytanie? –