2016-05-10 4 views
0

Я играю с 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); 
    } 
}; 

Как расшифровать эти символы в читаемый текст человека и сохранить значение в переменная?

+0

Предположительно, pdf.js не может определить правильное кодирование (потому что он не может делать такую ​​вещь, или, может быть, может, но с самого начала не было кодирования в PDF) и создал объявление hoc и сопровождающий файл шрифта. «Декодировать в человеческий читаемый текст» можно сделать только вручную и по шрифту (подмножество), отметив, какой код заменить каким-либо символом. – usr2564301

+0

Код, который вы используете в качестве базы, * слишком старый. Пожалуйста, используйте современную библиотеку и посмотрите лучший пример на https://github.com/mozilla/pdf.js/tree/master/examples/text-only. Трудно сказать, если PDF или библиотека при возникновении сбоев, пожалуйста, предоставьте как можно больше деталей, в противном случае у ваших вопросов будет слишком много ответов, например, выше или «не использовать XXX» – async5

+0

@ async5. Я использовал этот пример, и он работал хорошо. Можете ли вы опубликовать ответ, чтобы получить некоторые баллы? :) –

ответ

1

Версия PDF.js, которая используется в приведенном выше примере, является старой - новые версии добавляют API для извлечения текста, например. getTextContext(). Пожалуйста, см. Лучший пример в http://github.com/mozilla/pdf.js/tree/master/examples/text-only