有没有办法在nodejs中从PDF文件中提取文本,而不依赖于任何操作系统(比如pdf 2 text,或者windows上的xpdf)?我在nodejs中找不到任何“原生”PDF包。它们总是在现有操作系统命令之上的 Package 器/实用程序。谢谢
iqxoj9l91#
你检查过PDF2Json了吗?它是在PDF.js的基础上构建的。虽然它没有提供单行的文本输出,但是我相信你可以根据生成的Json output重新构建最终的文本:'Texts':包含位置、实际文本和样式信息的文本块数组:“x”和“y”:定位的相对坐标'clr':颜色字典中的颜色索引,与“Fill”对象中的“clr”字段相同。如果可以在颜色字典中找到一种颜色,则“oc”字段将作为“original color”值添加到该字段中。“A”:文本对齐方式,包括:左中右“R”:一个文本串数组,每个文本串对象有两个主要字段:“T”:实际文本“S”:样式字典中样式索引有关'样式字典'详细信息,请参阅'字典参考'部分
3zwtqj6y2#
经过一些工作,我终于得到了一个可靠的功能,阅读文本从PDF使用https://github.com/mozilla/pdfjs-dist要使其正常工作,首先在命令行上执行npm install:
npm i pdfjs-dist
然后使用以下代码创建一个文件(在本例中,我将该文件命名为“pdfExport.js”):
const pdfjsLib = require("pdfjs-dist"); async function GetTextFromPDF(path) { let doc = await pdfjsLib.getDocument(path).promise; let page1 = await doc.getPage(1); let content = await page1.getTextContent(); let strings = content.items.map(function(item) { return item.str; }); return strings; } module.exports = { GetTextFromPDF }
然后,它可以简单地用于任何其他js文件,如下所示:
const pdfExport = require('./pdfExport'); pdfExport.GetTextFromPDF('./sample.pdf').then(data => console.log(data));
yqyhoc1h3#
我想我会在这里插话给任何人谁遇到这个问题在未来。我有这个问题,并花了几个小时在字面上所有的PDF库的NPM。我的要求是,我需要运行它在AWS Lambda,所以不能依赖于操作系统的依赖性。下面的代码改编自另一个stackoverflow的答案(我目前找不到)。唯一的区别是我们导入的是ES 5版本,它与节点〉= 12一起工作。如果你只是导入pdfjs-dist,将有一个错误“Readable Stream is not defined”。希望它能帮助你!
import * as pdfjslib from 'pdfjs-dist/es5/build/pdf.js'; export default class Pdf { public static async getPageText(pdf: any, pageNo: number) { const page = await pdf.getPage(pageNo); const tokenizedText = await page.getTextContent(); const pageText = tokenizedText.items.map((token: any) => token.str).join(''); return pageText; } public static async getPDFText(source: any): Promise<string> { const pdf = await pdfjslib.getDocument(source).promise; const maxPages = pdf.numPages; const pageTextPromises = []; for (let pageNo = 1; pageNo <= maxPages; pageNo += 1) { pageTextPromises.push(Pdf.getPageText(pdf, pageNo)); } const pageTexts = await Promise.all(pageTextPromises); return pageTexts.join(' '); } }
用途
const fileBuffer = fs.readFile('sample.pdf'); const pdfText = await Pdf.getPDFText(fileBuffer);
qgelzfjb4#
您也可以直接使用PDF.js(https://github.com/mozilla/pdfjs-dist),而不是使用建议的PDF2Json。这样做的优点是,您不依赖于拥有PDF2Json的谦虚者,他会更新PDF.js库。
5ktev3wc5#
我使用"pdf-parse": "^1.1.1",使用节点14.20.1,这个解决方案很有效您可以使用以下方式安装它:yarn add pdf-parse个这是将PDF文件转换为文本的主要功能。
"pdf-parse": "^1.1.1"
yarn add pdf-parse
const path = require('path'); const fs = require('fs'); const pdf = require('pdf-parse'); const assert = require('assert'); const extractText = async (pathStr) => { assert (fs.existsSync(pathStr), `Path does not exist ${pathStr}`) const pdfFile = path.resolve(pathStr) const dataBuffer = fs.readFileSync(pdfFile); const data = await pdf(dataBuffer) return data.text } module.exports = { extractText }
然后,您可以像这样使用函数:
const { extractText } = require('../api/lighthouse/lib/pdfExtraction') extractText('./data/CoreDeveloper-v5.1.4.pdf').then(t => console.log(t))
5条答案
按热度按时间iqxoj9l91#
你检查过PDF2Json了吗?它是在PDF.js的基础上构建的。虽然它没有提供单行的文本输出,但是我相信你可以根据生成的Json output重新构建最终的文本:
'Texts':包含位置、实际文本和样式信息的文本块数组:“x”和“y”:定位的相对坐标'clr':颜色字典中的颜色索引,与“Fill”对象中的“clr”字段相同。如果可以在颜色字典中找到一种颜色,则“oc”字段将作为“original color”值添加到该字段中。“A”:文本对齐方式,包括:左中右“R”:一个文本串数组,每个文本串对象有两个主要字段:“T”:实际文本“S”:样式字典中样式索引有关'样式字典'详细信息,请参阅'字典参考'部分
3zwtqj6y2#
经过一些工作,我终于得到了一个可靠的功能,阅读文本从PDF使用https://github.com/mozilla/pdfjs-dist
要使其正常工作,首先在命令行上执行npm install:
然后使用以下代码创建一个文件(在本例中,我将该文件命名为“pdfExport.js”):
然后,它可以简单地用于任何其他js文件,如下所示:
yqyhoc1h3#
我想我会在这里插话给任何人谁遇到这个问题在未来。我有这个问题,并花了几个小时在字面上所有的PDF库的NPM。我的要求是,我需要运行它在AWS Lambda,所以不能依赖于操作系统的依赖性。
下面的代码改编自另一个stackoverflow的答案(我目前找不到)。唯一的区别是我们导入的是ES 5版本,它与节点〉= 12一起工作。如果你只是导入pdfjs-dist,将有一个错误“Readable Stream is not defined”。希望它能帮助你!
用途
qgelzfjb4#
您也可以直接使用PDF.js(https://github.com/mozilla/pdfjs-dist),而不是使用建议的PDF2Json。这样做的优点是,您不依赖于拥有PDF2Json的谦虚者,他会更新PDF.js库。
5ktev3wc5#
我使用
"pdf-parse": "^1.1.1"
,使用节点14.20.1,这个解决方案很有效您可以使用以下方式安装它:
yarn add pdf-parse
个这是将PDF文件转换为文本的主要功能。
然后,您可以像这样使用函数: