用Javascript从pdf提取文本

我想知道是否可以仅使用Javascript将文本包含在PDF文件中?如果是,谁能告诉我如何?

我知道有一些服务器端的Java,C#等库,但我宁愿不使用服务器。谢谢

回答:

这是一个古老的问题,但是由于pdf.js多年来一直在发展,所以我想给出一个新的答案。也就是说,它可以在本地完成,而无需涉及任何服务器或外部服务。新的pdf.js具有一个函数:page.getTextContent()。您可以从中获取文本内容。我已经用下面的代码成功地做到了。

  1. 您在每个步骤中得到的都是诺言。您需要采用以下方式进行编码:.then( function(){...})继续进行下一步。

1) PDFJS.getDocument( data ).then( function(pdf) {

2) pdf.getPage(i).then( function(page){

3) page.getTextContent().then( function(textContent){

  1. 您最终得到的是一个字符串数组textContent.bidiTexts[]。您将它们串联起来可获得1页的文本。文本块的坐标用于判断是否需要插入换行符或空格。(这可能并不完全可靠,但是从我的测试来看,这似乎还可以。)

  2. 输入参数data必须是URL或ArrayBuffer类型的数据。我在FileReaderAPI中使用ReadAsArrayBuffer(file)函数 来获取数据。

希望这可以帮助。

根据其他用户的说法,该库已更新并导致代码中断。根据下面 async5

的评论,您需要替换textContent.bidiTextstextContent.items

    function Pdf2TextClass(){

var self = this;

this.complete = 0;

/**

*

* @param data ArrayBuffer of the pdf file content

* @param callbackPageDone To inform the progress each time

* when a page is finished. The callback function's input parameters are:

* 1) number of pages done;

* 2) total number of pages in file.

* @param callbackAllDone The input parameter of callback function is

* the result of extracted text from pdf file.

*

*/

this.pdfToText = function(data, callbackPageDone, callbackAllDone){

console.assert( data instanceof ArrayBuffer || typeof data == 'string' );

PDFJS.getDocument( data ).then( function(pdf) {

var div = document.getElementById('viewer');

var total = pdf.numPages;

callbackPageDone( 0, total );

var layers = {};

for (i = 1; i <= total; i++){

pdf.getPage(i).then( function(page){

var n = page.pageNumber;

page.getTextContent().then( function(textContent){

if( null != textContent.bidiTexts ){

var page_text = "";

var last_block = null;

for( var k = 0; k < textContent.bidiTexts.length; k++ ){

var block = textContent.bidiTexts[k];

if( last_block != null && last_block.str[last_block.str.length-1] != ' '){

if( block.x < last_block.x )

page_text += "\r\n";

else if ( last_block.y != block.y && ( last_block.str.match(/^(\s?[a-zA-Z])$|^(.+\s[a-zA-Z])$/) == null ))

page_text += ' ';

}

page_text += block.str;

last_block = block;

}

textContent != null && console.log("page " + n + " finished."); //" content: \n" + page_text);

layers[n] = page_text + "\n\n";

}

++ self.complete;

callbackPageDone( self.complete, total );

if (self.complete == total){

window.setTimeout(function(){

var full_text = "";

var num_pages = Object.keys(layers).length;

for( var j = 1; j <= num_pages; j++)

full_text += layers[j] ;

callbackAllDone(full_text);

}, 1000);

}

}); // end of page.getTextContent().then

}); // end of page.then

} // of for

});

}; // end of pdfToText()

}; // end of class

以上是 用Javascript从pdf提取文本 的全部内容, 来源链接: utcz.com/qa/435732.html

回到顶部