Merge pull request #14159 from stbensonimoh/convert-example-to-async-await

Convert examples/node/pdf2svg.js to await/async #14125
This commit is contained in:
Jonas Jenwald 2021-10-21 10:30:02 +02:00 committed by GitHub
commit 7c9e5781fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -40,7 +40,7 @@ try {
// Dumps svg outputs to a folder called svgdump // Dumps svg outputs to a folder called svgdump
function getFilePathForPage(pageNum) { function getFilePathForPage(pageNum) {
const name = path.basename(pdfPath, path.extname(pdfPath)); const name = path.basename(pdfPath, path.extname(pdfPath));
return path.join(outputDirectory, name + "-" + pageNum + ".svg"); return path.join(outputDirectory, `${name}-${pageNum}.svg`);
} }
/** /**
@ -87,56 +87,36 @@ function writeSvgToFile(svgElement, filePath) {
}); });
} }
// Will be using promises to load document, pages and misc data instead of // Will be using async/await to load document, pages and misc data.
// callback.
const loadingTask = pdfjsLib.getDocument({ const loadingTask = pdfjsLib.getDocument({
data, data,
cMapUrl: CMAP_URL, cMapUrl: CMAP_URL,
cMapPacked: CMAP_PACKED, cMapPacked: CMAP_PACKED,
fontExtraProperties: true, fontExtraProperties: true,
}); });
loadingTask.promise (async function () {
.then(function (doc) { const doc = await loadingTask.promise;
const numPages = doc.numPages; const numPages = doc.numPages;
console.log("# Document Loaded"); console.log("# Document Loaded");
console.log("Number of Pages: " + numPages); console.log(`Number of Pages: ${numPages}`);
console.log(); console.log();
let lastPromise = Promise.resolve(); // will be used to chain promises for (let pageNum = 1; pageNum <= numPages; pageNum++) {
const loadPage = function (pageNum) { try {
return doc.getPage(pageNum).then(function (page) { const page = await doc.getPage(pageNum);
console.log("# Page " + pageNum); console.log(`# Page ${pageNum}`);
const viewport = page.getViewport({ scale: 1.0 }); const viewport = page.getViewport({ scale: 1.0 });
console.log("Size: " + viewport.width + "x" + viewport.height); console.log(`Size: ${viewport.width}x${viewport.height}`);
console.log(); console.log();
return page.getOperatorList().then(function (opList) { const opList = await page.getOperatorList();
const svgGfx = new pdfjsLib.SVGGraphics(page.commonObjs, page.objs); const svgGfx = new pdfjsLib.SVGGraphics(page.commonObjs, page.objs);
svgGfx.embedFonts = true; svgGfx.embedFonts = true;
return svgGfx.getSVG(opList, viewport).then(function (svg) { const svg = await svgGfx.getSVG(opList, viewport);
return writeSvgToFile(svg, getFilePathForPage(pageNum)).then( await writeSvgToFile(svg, getFilePathForPage(pageNum));
function () { } catch (err) {
console.log("Page: " + pageNum); console.log(`Error: ${err}`);
},
function (err) {
console.log("Error: " + err);
}
);
});
});
});
};
for (let i = 1; i <= numPages; i++) {
lastPromise = lastPromise.then(loadPage.bind(null, i));
} }
return lastPromise; }
}) console.log("# End of Document");
.then( })();
function () {
console.log("# End of Document");
},
function (err) {
console.error("Error: " + err);
}
);