mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0.git
synced 2026-08-19 04:23:55 +00:00
90 lines
3.2 KiB
JavaScript
Vendored
90 lines
3.2 KiB
JavaScript
Vendored
/**
|
|
* Find all img elements with data-pdf-thumbnail-file attribute,
|
|
* then load pdf file given in the attribute,
|
|
* then use pdf.js to draw the first page on a canvas,
|
|
* then convert it to base64,
|
|
* then set it as the img src.
|
|
*/
|
|
var createPDFThumbnails = function(){
|
|
|
|
var worker = null;
|
|
var loaded = false;
|
|
var renderQueue = [];
|
|
|
|
// select all img elements with data-pdf-thumbnail-file attribute
|
|
var nodesArray = Array.prototype.slice.call(document.querySelectorAll('img[data-pdf-thumbnail-file]'));
|
|
|
|
if (!nodesArray.length) {
|
|
// No PDF found, don't load PDF.js
|
|
return;
|
|
}
|
|
|
|
if (!loaded && typeof(pdfjsLib) === 'undefined') {
|
|
var src = document.querySelector('script[data-pdfjs-src]').getAttribute('data-pdfjs-src');
|
|
|
|
if (!src) {
|
|
throw Error('PDF.js URL not set in "data-pdfjs-src" attribute: cannot load PDF.js');
|
|
}
|
|
|
|
var script = document.createElement('script');
|
|
script.src = src;
|
|
document.head.appendChild(script).onload = renderThumbnails;
|
|
loaded = true;
|
|
}
|
|
else {
|
|
renderThumbnails();
|
|
}
|
|
|
|
function renderThumbnails() {
|
|
if (!pdfjsLib) {
|
|
throw Error("pdf.js failed to load. Check data-pdfjs-src attribute.");
|
|
}
|
|
|
|
nodesArray.forEach(function(element) {
|
|
if (null === worker) {
|
|
worker = new pdfjsLib.PDFWorker();
|
|
}
|
|
|
|
var filePath = element.getAttribute('data-pdf-thumbnail-file');
|
|
var imgWidth = element.getAttribute('data-pdf-thumbnail-width');
|
|
var imgHeight = element.getAttribute('data-pdf-thumbnail-height');
|
|
|
|
pdfjsLib.getDocument({url: filePath, worker: worker}).promise.then(function (pdf) {
|
|
pdf.getPage(1).then(function (page) {
|
|
var canvas = document.createElement("canvas");
|
|
var viewport = page.getViewport({scale: 1.0});
|
|
var context = canvas.getContext('2d');
|
|
|
|
if (imgWidth) {
|
|
viewport = page.getViewport({scale: imgWidth / viewport.width});
|
|
} else if (imgHeight) {
|
|
viewport = page.getViewport({scale: imgHeight / viewport.height});
|
|
}
|
|
|
|
canvas.height = viewport.height;
|
|
canvas.width = viewport.width;
|
|
|
|
page.render({
|
|
canvasContext: context,
|
|
viewport: viewport
|
|
}).promise.then(function () {
|
|
element.src = canvas.toDataURL();
|
|
});
|
|
}).catch(function() {
|
|
console.log("pdfThumbnails error: could not open page 1 of document " + filePath + ". Not a pdf ?");
|
|
});
|
|
}).catch(function() {
|
|
console.log("pdfThumbnails error: could not find or open document " + filePath + ". Not a pdf ?");
|
|
});
|
|
});
|
|
}
|
|
};
|
|
|
|
if (
|
|
document.readyState === "complete" ||
|
|
(document.readyState !== "loading" && !document.documentElement.doScroll)
|
|
) {
|
|
createPDFThumbnails();
|
|
} else {
|
|
document.addEventListener("DOMContentLoaded", createPDFThumbnails);
|
|
} |