'Uncaught (in promise) TypeError: Cannot read properties of null (reading 'sendWithPromise') Pdf.js + electron
i am making electron desktop kiosk app and have problem with rendering pdf (im using library pdf.js). I need to help with this error, i make bold code where is error line 192 (const page = await doc.getPage(pageNumber);). HELP
Uncaught (in promise) TypeError: Cannot read properties of null (reading 'sendWithPromise') at WorkerTransport.getPage (api.js:2792:21) at PDFDocumentProxy.getPage (api.js:786:12) at createPDF (pdf-handler.js:192:26) at HTMLDivElement.zoomInPdf (pdf-handler.js:96:7) getPage @ api.js:2792 getPage @ api.js:786 createPDF @ pdf-handler.js:192 zoomInPdf @ pdf-handler.js:96
let state = {
currentPage: 1,
scale: 1.5
};
export function getCurrentPage() {
return state.currentPage;
}
export function getCurrentScale() {
return state.scale;
}
export function setCurrentPage(currentPage) {
state = { ...state, currentPage };
}
export function setCurrentScale(scale) {
state = { ...state, scale };
}
export async function openPDF(filepath, filename) {
document.getElementById("pdfPageName").innerHTML = filename;
console.log(filename)
setCurrentPage(1);
setCurrentScale(1.5)
clearCanvas(canvas);
var pdfDocument = await pdfjsLib.getDocument(filepath).promise;
createPDF(pdfDocument, getCurrentPage(), getCurrentScale());
setPages(pdfDocument.numPages);
const nextButtonHandler = () => {
const nextPageNumber = getCurrentPage() + 1;
if (nextPageNumber > pdfDocument.numPages) return;
setCurrentPage(nextPageNumber);
if (pageRendering) {
console.log("renderuje sie")
//ensure previous operations were cancelled or completed.
clearCanvas(canvas)
.then(function () {
createPDF(pdfDocument, nextPageNumber, getCurrentScale());
});
} else {
createPDF(pdfDocument, nextPageNumber, getCurrentScale());
};
};
const prevButtonHandler = () => {
const prevPageNumber = getCurrentPage() - 1;
if (prevPageNumber < 1) return;
setCurrentPage(prevPageNumber);
if (pageRendering) {
console.log("renderuje sie")
//ensure previous operations were cancelled or completed.
clearCanvas(canvas)
.then(function () {
createPDF(pdfDocument, prevPageNumber, getCurrentScale());
});
} else {
createPDF(pdfDocument, prevPageNumber, getCurrentScale());
};
};
const zoomInPdf = () => {
const zoomIn = getCurrentScale() + 1;
if (zoomIn > 5) return;
setCurrentScale(zoomIn);
if (pageRendering) {
console.log("renderuje sie")
console.log(canvas)
console.log(canvasContext)
clearCanvas(canvas)
.then(function () {
createPDF(pdfDocument, getCurrentPage(), getCurrentScale());
});
} else {
createPDF(pdfDocument, getCurrentPage(), getCurrentScale());
};
};
const zoomOutPdf = () => {
const zoomOut = getCurrentScale() - 1;
if (zoomOut < 1) return;
setCurrentScale(zoomOut);
if (pageRendering) {
console.log("renderuje sie")
//ensure previous operations were cancelled or completed.
clearCanvas(canvas)
.then(function () {
createPDF(pdfDocument, getCurrentPage(), getCurrentScale());
});
} else {
createPDF(pdfDocument, getCurrentPage(), getCurrentScale());
};
};
const backButtonHandler = () => {
console.log(pdfDocument)
pdfDocument.destroy()
hidePDFView();
nextButton.removeEventListener("click", nextButtonHandler);
prevButton.removeEventListener("click", prevButtonHandler);
backButton.removeEventListener("click", backButtonHandler);
zoomInButton.removeEventListener("click", prevButtonHandler);
zoomOutButton.removeEventListener("click", backButtonHandler);
console.log(pdfDocument)
};
nextButton.addEventListener("click", nextButtonHandler);
prevButton.addEventListener("click", prevButtonHandler);
backButton.addEventListener("click", backButtonHandler);
zoomInButton.addEventListener("click", zoomInPdf);
zoomOutButton.addEventListener("click", zoomOutPdf);
}
var pageRendering = false
var pageNumPending = null
export async function createPDF(doc, pageNumber, scaleNumber) {
pageRendering = true;
console.log(doc)
console.log(doc.pageNumber)
console.log(pageNumber)
console.log(scaleNumber)
**const page = await doc.getPage(pageNumber);**
console.log(page)
const viewport = page.getViewport({ scale: scaleNumber });
console.log(viewport)
canvas.height = viewport.height;
canvas.width = viewport.width;
console.log(pageRendering)
var renderTask = page.render({ viewport, canvasContext });
renderTask.promise.then(function () {
console.log("sius")
console.log(pageRendering)
pageRendering = false;
});
setPage(pageNumber);
return renderTask
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
