gpt4 book ai didi

javascript - 如何使用 JavaScript 从 PDF 中提取文本

转载 作者:IT王子 更新时间:2023-10-29 03:12:18 25 4
gpt4 key购买 nike

我想知道是否可以仅使用 Javascript 获取 PDF 文件中的文本?如果是,谁能告诉我怎么做?

我知道有一些服务器端 java、c# 等库,但我不想使用服务器。谢谢

最佳答案

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

  1. 您在每一步中得到的都是一个 promise 。您需要这样编码:.then( function(){...}) 才能继续下一步。

    1) PDFJS.getDocument(数据).then(函数(pdf){

    2) pdf.getPage(i).then( 函数(页面){

    3) page.getTextContent().then( 函数(textContent){

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

  3. 输入参数data需要是一个URL或者ArrayBuffer类型的数据。我使用 FileReader API 中的 ReadAsArrayBuffer(file) 函数来获取数据。

希望这对您有所帮助。

注意:根据其他用户的说法,库已更新并导致代码中断。根据下面 async5 的评论,您需要将 textContent.bidiTexts 替换为 textContent.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 - 如何使用 JavaScript 从 PDF 中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1554280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com