10

有没有办法从 nodejs 中的 PDF 中提取文本而没有任何操作系统依赖项(如 pdf2text 或 windows 上的 xpdf)?我无法在 nodejs 中找到任何“本机”pdf 包。它们始终是现有操作系统命令之上的包装器/实用程序。谢谢

4

4 回答 4

7

你检查过 PDF2Json吗?它建立在PDF.js之上。虽然它没有将文本输出作为单行提供,但我相信您可能只是根据生成的Json 输出重建最终文本:

'Texts':包含位置、实际文本和样式信息的文本块数组:'x' 和 'y':定位的相对坐标 'clr':颜色字典中的颜色索引,与“Fill”中的“clr”字段相同' 目的。如果在颜色字典中可以找到颜色,'oc'字段将作为'原始颜色'值添加到该字段中。'A':文本对齐,包括:左中右'R':文本运行数组,每个文本运行对象有两个主要字段:“T”:实际文本“S”:样式字典中的样式索引。有关“样式字典”的更多信息可以在“字典参考”部分找到

于 2015-06-15T10:46:06.123 回答
3

经过一番工作,我终于得到了一个可靠的功能,可以使用https://github.com/mozilla/pdfjs-dist从 PDF 中读取文本

为了让它工作,首先 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));
于 2020-04-17T18:46:00.967 回答
2

以为我会在这里为将来遇到此问题的任何人提供帮助。我遇到了这个问题,花了几个小时浏览 NPM 上的所有 PDF 库。我的要求是我需要在 AWS Lambda 上运行它,因此不能依赖操作系统依赖项。

下面的代码改编自另一个 stackoverflow 答案(我目前找不到)。唯一的区别是我们导入了适用于 Node >= 12 的 ES5 版本。如果你只导入 pdfjs-dist 将会出现“未定义可读流”的错误。希望能帮助到你!

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);
于 2020-06-09T10:18:55.620 回答
0

除了使用建议的 PDF2Json,您还可以直接使用 PDF.js ( https://github.com/mozilla/pdfjs-dist )。这样做的好处是您不依赖于拥有 PDF2Json 的谦虚并且他更新了 PDF.js 基础。

于 2016-06-06T12:50:40.653 回答