pdf.js text color extraction
HTML
<script src="https://cdn.rawgit.com/mozilla/pdf.js/gh-pages/build/pdf.js"></script>
<input id="files" type="file" />
<div id="result"></div>
CSS
#result {
margin-top: 20px;
}
JavaScript
var input = document.getElementById("files");
input.addEventListener("change", function (e) {
var file = e.target.files[0],
reader = new FileReader();
reader.onload = function () {
readPdf(reader.result);
}
reader.readAsArrayBuffer(file);
});
function readPdf(buffer) {
PDFJS.disableWorker = true;
PDFJS.getDocument(buffer).then(function (pdf) {
var page, texts;
pdf.getPage(1).then(function (_page) {
page = _page;
return page.getTextContent();
}).then(function (content) {
texts = content.items;
return renderToCanvas(page);
}).then(function (imgData) {
console.time('color');
parseColors(imgData, texts);
console.timeEnd('color');
printTexts(texts);
}).catch(function(e){console.log(e);});
});
}
function renderToCanvas(page) {
var viewport = page.getViewport(1);
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
var renderContext = {
canvasContext: context,
viewport: viewport
};
return page.render(renderContext).then(function () {
return context.getImageData(0, 0, viewport.width, viewport.height);
});
}
function printTexts(texts) {
var out = "";
texts.forEach(function (text) {
var rgb = text.color;
out += '<span style="color: rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ');">' + text.str + '</span>';
});
document.getElementById("result").innerHTML = out;
}
function parseColors(imgData, texts) {
var data = imgData.data,
width = imgData.width,
height = imgData.height,
defaultColor = [0, 0, 0],
minVariance = 20;
texts.forEach(function (t) {
var left = Math.floor(t.transform[4]),
w = Math.round(t.width),
h =...