Se capisco bene il problema, potrei avere una soluzione. Quando ho cliccato troppo velocemente sui pulsanti precedente o successivo, la tela non aveva il tempo di aggiornare e due (o più) pagine disegnate, era illeggibile.
per risolvere il problema, io uso il seguente codice:
var stop = false;
function goPrevious() {
if (pageNum > 1 && !stop)
{
stop = true;
pageNum--;
renderPage(pageNum);
}
}
function goNext() {
if (pageNum < pdfDoc.numPages && !stop)
{
stop = true;
pageNum++;
renderPage(pageNum);
}
}
Ho modificato anche la funzione di rendering nel file pdf.js:
render: function PDFPageProxy_render(params) {
this.renderInProgress = true;
var promise = new Promise();
var stats = this.stats;
stats.time('Overall');
// If there is no displayReadyPromise yet, then the operatorList was never
// requested before. Make the request and create the promise.
if (!this.displayReadyPromise) {
this.displayReadyPromise = new Promise();
this.destroyed = false;
this.stats.time('Page Request');
this.transport.messageHandler.send('RenderPageRequest', {
pageIndex: this.pageNumber - 1
});
}
var self = this;
function complete(error) {
self.renderInProgress = false;
stop = false;
if (self.destroyed || self.cleanupAfterRender) {
delete self.displayReadyPromise;
delete self.operatorList;
self.objs.clear();
}
if (error)
promise.reject(error);
else
promise.resolve();
}
var continueCallback = params.continueCallback;
//etc.
(nel mio file pdf.js , questo è tra le righe 2563 e 2596).
Come risultato, non verrà disegnata nessuna nuova pagina fino a quando la pagina precedente non è stata interamente disegnata, anche se si fa clic molto velocemente sui pulsanti precedente/successivo!
Un'altra soluzione potrebbe essere quella di annullare il disegno precedente:
function renderPage(num) {
pdfDoc.getPage(num).then(function(page) {
// canvas resize
viewport = page.getViewport(ratio);
canvas.height = viewport.height;
canvas.width = viewport.width;
// draw the page into the canvas
var pageTimestamp = new Date().getTime();
timestamp = pageTimestamp;
var renderContext = {
canvasContext: ctx,
viewport: viewport,
continueCallback: function(cont) {
if(timestamp != pageTimestamp) {
return;
}
cont();
}
};
page.render(renderContext);
// update page numbers
document.getElementById('page_num').textContent = pageNum;
document.getElementById('page_count').textContent = pdfDoc.numPages;
});
}
Spero che vi aiuterà, e mi dispiace per il mio inglese;) have a nice day
Ho provato questo e sembrava funzionare meglio di prima, però ho ancora affrontare la questione mentre si fa clic troppo digiunano non so se si è di fronte anche lui. Vorrei poter disabilitare i pulsanti fino a quando il canvas non è stato caricato completamente, ho provato a usare window.onload(), non ha funzionato perché il caricamento della tela richiede più tempo. Il visualizzatore completo.html di pdf.js ha la funzionalità di arresto, non riesce a capire come hanno fatto però. – sss
Ho provato solo la tua prima soluzione, lasciami controllare la seconda. Grazie mille per il tuo impegno e il tuo inglese è fantastico. :) – sss
Ho provato a cancellare il disegno precedente, tuttavia timestamp = pageTimestamp; stava dando un timestamp di errore non definito, quindi ho cambiato il codice in var timestamp = pageTimestamp; e ora non entra mai nella condizione if (timestamp! = pageTimestamp) in quanto sono sempre uguali. Che cosa sto facendo di sbagliato ? Grazie ancora in anticipo. :) – sss