ho messo insieme un po 'di codice completo e sono stato in grado di trovare il problema con la soluzione qui di seguito:
var int8View = new Uint8Array(...); //populate int8View with the raw pdf data
PDFJS.getDocument(int8View).then(function(pdf) {
}
Quando si utilizza questa soluzione mi sono imbattuto nel problema che altri utenti hanno visto (@MurWade e @ user94154) - il messaggio di errore stream must have data
. Sembra che il problema è nella seguente riga:
var int8View = new Uint8Array(...);
La matrice contenente i dati non viene correttamente creato, in quanto i dati non è nel formato previsto. Pertanto, questa linea funziona per alcuni casi, ma potrebbe non funzionare nel caso generale.
Ho messo insieme una soluzione completa, che sembra funzionare meglio. Carica un file PDF e lo converte in un flusso PDF non elaborato. Questo è lì solo a scopo di test, in un esempio reale, lo stream PDF verrà probabilmente ricevuto in modo diverso. È possibile esaminare lo stream in un debugger e verrà visualizzato come testo normale. Di seguito è riportata la riga chiave del codice per far funzionare questo esempio. Invece di convertire il flusso PDF grezzo in un array, convertirlo in dati.
var docInitParams = { data: pdfraw };
Quindi procedere con il caricamento dei dati. Di seguito è riportato l'esempio completo di come caricare un flusso PDF raw standard e visualizzarlo. Ho usato il campione mondiale PDF JS hello come punto di partenza. Per favore fatemi sapere nei commenti se qualche chiarimento è necessario su questo.
'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);
});
});
});
});
fonte
2015-08-14 15:11:16
Bello, accettando questa risposta poiché sembra più completa della mia originale! – Swiss
Grazie! Fammi sapere se posso fare qualcosa per migliorarci. –
@ user94154, la soluzione sopra riportata risponde alla tua domanda? –