Javascript 用pdf.js解码奇怪的字符
我正在使用pdf.js将pdf转换为文本。我注意到显示了一些奇怪的字符,但只显示在HTML中 呈现它们时,将显示正确的内容(人类可读的文本) 然而,如果我使用Javascript 用pdf.js解码奇怪的字符,javascript,pdf,pdf.js,Javascript,Pdf,Pdf.js,我正在使用pdf.js将pdf转换为文本。我注意到显示了一些奇怪的字符,但只显示在HTML中 呈现它们时,将显示正确的内容(人类可读的文本) 然而,如果我使用innerHTML获取内容,我会得到一些奇怪的东西 生成此HTML的代码部分取自,是: this.pdfToText=函数(数据){ var div=document.getElementById('viewer'); //呈现第一页 var pdf=新的PDFJS.PDFDoc(数据); var total=pdf.numPages;
innerHTML
获取内容,我会得到一些奇怪的东西
生成此HTML的代码部分取自,是:
this.pdfToText=函数(数据){
var div=document.getElementById('viewer');
//呈现第一页
var pdf=新的PDFJS.PDFDoc(数据);
var total=pdf.numPages;
对于(i=1;i上述示例中使用的PDF.js版本是旧版本——新版本添加了文本提取API,例如getTextContext()。请在处查看更好的示例,可能PDF.js无法确定正确的编码(因为它不能做这样的事情,或者可能可以,但编码一开始就不在PDF中)并创建了一个特殊的编码和附带的字体文件。“解码为人类可读的文本”只能手动完成,并且每个字体,记下要用什么字符替换的代码。您用作基础的代码太旧。请使用modern library,并在上查看更好的示例。很难判断PDF或库是否有问题,请提供尽可能多的详细信息,否则您的问题有太多的答案,如上面所述或“不要使用XXX”@async5我使用了这个例子,效果很好。你能发布一个答案,这样你就能得到一些分数吗?:)
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);
}
};