Я играю с pdf.js для преобразования PDF в текст. Я заметил, что некоторые странные символы отображаются, но только в HTML.Декодирование странных символов по pdf.js
Когда они отображаются, отображается правильное содержание (текст, читаемый человеком).
Однако, если я использую innerHTML
, чтобы получить контент, я получаю странные вещи.
Часть кода порождающей этот HTML взят из here, и:
this.pdfToText = function(data) {
var div = document.getElementById('viewer');
// render the first pages
var pdf = new PDFJS.PDFDoc(data);
var total = pdf.numPages;
for (i = 1; i <= total; i++) {
var page = pdf.getPage(i);
var canvas = document.createElement('canvas');
document.body.appendChild(canvas);
canvas.id = 'page' + i;
canvas.mozOpaque = true;
div.appendChild(canvas);
canvas.width = page.width;
canvas.height = page.height;
var context = canvas.getContext('2d');
context.save();
context.fillStyle = 'rgb(255, 255, 255)';
context.fillRect(0, 0, canvas.width, canvas.height);
context.restore();
self.setMessage("Rendering...");
var textLayer = document.createElement('div');
textLayer.className = 'textLayer';
document.body.appendChild(textLayer);
page.startRendering(context, function() {
if (++self.complete == total) {
self.setMessage("Finished rendering. Extracting text...");
window.setTimeout(function() {
var layers = [];
var nodes = document.querySelectorAll(".textLayer > div");
for (var j = 0; j < nodes.length; j++) {
layers.push(nodes[j].textContent + "\n");
}
self.sendOutput(layers.join("\n"));
self.setMessage("Done!");
}, 1000);
}
}, textLayer);
}
};
Как расшифровать эти символы в читаемый текст человека и сохранить значение в переменная?
Предположительно, pdf.js не может определить правильное кодирование (потому что он не может делать такую вещь, или, может быть, может, но с самого начала не было кодирования в PDF) и создал объявление hoc и сопровождающий файл шрифта. «Декодировать в человеческий читаемый текст» можно сделать только вручную и по шрифту (подмножество), отметив, какой код заменить каким-либо символом. – usr2564301
Код, который вы используете в качестве базы, * слишком старый. Пожалуйста, используйте современную библиотеку и посмотрите лучший пример на https://github.com/mozilla/pdf.js/tree/master/examples/text-only. Трудно сказать, если PDF или библиотека при возникновении сбоев, пожалуйста, предоставьте как можно больше деталей, в противном случае у ваших вопросов будет слишком много ответов, например, выше или «не использовать XXX» – async5
@ async5. Я использовал этот пример, и он работал хорошо. Можете ли вы опубликовать ответ, чтобы получить некоторые баллы? :) –