我可以使用 Node.js 阅读 PDF 或 Word 文档吗?

Posted

技术标签:

【中文标题】我可以使用 Node.js 阅读 PDF 或 Word 文档吗?【英文标题】:Can I read PDF or Word Docs with Node.js? 【发布时间】:2012-02-20 17:36:26 【问题描述】:

我找不到任何包来执行此操作。我知道 php 有大量的 PDF 库(如 http://www.fpdf.org/),但对于 Node 有什么?

【问题讨论】:

【参考方案1】:

textract 是一个很棒的库,支持 PDF、Doc、Docx 等。

【讨论】:

注意:textract 使用 catdoc 处理 .doc 文件,在 windows 中不起作用。 node-office 未在积极开发中(npm 表示生命周期结束),截至 2016 年 9 月,hwile textract 正在积极开发中。 @NayanPatel 这是因为最近的一些更新。我有一个依赖于这种行为的项目,所以我固定了我的版本。 @James_1x0 你固定的版本是什么版本。【参考方案2】:

看起来有一些 pdf 的,但我没有找到任何用于 Word 的。

无论如何,像这样的 CPU 密集型处理并不是 Node 的真正强项(即,使用 node 比任何其他语言都没有额外的好处)。一个务实的方法是找到一个好的工具并从 Node 中使用它。

我在办公室里听说过关于 docsplit http://documentcloud.github.com/docsplit/ 的好消息

虽然它不是 Node,但您可以使用 http://nodejs.org/docs/latest/api/all.html#child_process.exec 从 Node 轻松调用它

【讨论】:

纯 JS 方案的优点是可以在浏览器和 Node 之间移植【参考方案3】:

您可以轻松地将一个文件转换为另一个文件,或者使用例如 .doc 模板来生成一个 .pdf 文件,但您可能希望使用现有的 Web 服务来完成此任务。

这可以使用Livedocx 的服务来完成,例如

要从节点使用此服务,请参阅node-livedocx(免责声明:我是此节点模块的作者)

【讨论】:

不相关,问题是如何阅读 PDF/DOC 文件而不是如何生成。【参考方案4】:

我建议您查看unoconv 进行初始转换,这使用LibreOffice 或OpenOffice 进行实际转换。这会增加一些开销。

我会设置一些工作人员来设置所有必需品,并使用请求/响应队列来处理转换...(可能需要查看 kue 或 zmq)

一般来说,这是一个 CPU 密集型和繁重的任务,应该卸载... Pandoc 和其他人特别提到 .docx,而不是 .doc,所以它们可能也可能不是选项。


注意:我知道这个问题很老,只是想为遇到此问题的其他人提供当前答案。

【讨论】:

【参考方案5】:

您可以将 pdf-text 用于 pdf 文件。它将从pdf中提取文本到文本“块”数组中。用于对结构化 pdf 文本进行模糊解析。

var pdfText = require('pdf-text')
var pathToPdf = __dirname + "/info.pdf"


pdfText(pathToPdf, function(err, chunks) 
  //chunks is an array of strings  
  //loosely corresponding to text objects within the pdf 
  //for a more concrete example, view the test file in this repo 
)

var fs = require('fs')
var buffer = fs.readFileSync(pathToPdf)
pdfText(buffer, function(err, chunks) 
 console.log(chunks)
)

对于 docx 文件,您可以使用 mammoth,它将从 .docx 文件中提取文本。

var mammoth = require("mammoth");

mammoth.extractRawText(path: "./doc.docx")
    .then(function(result)
        var text = result.value; // The raw text 
        console.log(text);
        var messages = result.messages;
    )
    .done();

我希望这会有所帮助。

【讨论】:

【参考方案6】:

解析pdf文件可以使用pdf2json节点模块

它允许您将 pdf 文件转换为 json 以及原始文本数据。

【讨论】:

【参考方案7】:

如果您只需要从 Word 文档转换,另一个不错的选择是 Mammoth.js。

Mammoth 旨在转换 .docx 文档,例如那些创建的 通过 Microsoft Word,并将它们转换为 HTML。猛犸象的目标是生产 通过使用文档中的语义信息,简单而干净的 HTML, 并忽略其他细节。例如,猛犸象将任何 具有样式 Heading 1 到 h1 元素的段落,而不是 试图完全复制样式(字体、文本大小、颜色等) 标题。

.docx 使用的结构与 HTML 的结构,这意味着转换不太可能是 非常适合更复杂的文档。猛犸象是最好的,如果你只 使用样式在语义上标记您的文档。

【讨论】:

【参考方案8】:

这是一个示例,展示了如何使用 PDF.js 从 PDF 中下载和提取文本:

import _ from 'lodash';
import superagent from 'superagent';
import pdf from 'pdfjs-dist';

const url = 'http://unec.edu.az/application/uploads/2014/12/pdf-sample.pdf';

const main = async () => 
  const response = await superagent.get(url).buffer();
  const data = response.body;
  const doc = await pdf.getDocument( data );
  for (const i of _.range(doc.numPages)) 
    const page = await doc.getPage(i + 1);
    const content = await page.getTextContent();
    for (const  str  of content.items) 
      console.log(str);
    
  
;

main().catch(error => console.error(error));

【讨论】:

【参考方案9】:

您可以使用Aspose.Words Cloud SDK for Node.js 从 DOC/DOCX、Open Office 和 PDF 中提取文本。它是付费 API,但免费计划提供每月 150 次免费 API 调用。

P.S:我是 Aspose 的开发布道者。

const  WordsApi, ConvertDocumentRequest  = require("asposewordscloud");
var fs = require('fs');

// Get Customer ID and Customer Key from https://dashboard.aspose.cloud/
wordsApi = new WordsApi("xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", "xxxxxxxxxxxxxxxxxxxx");

var request = new ConvertDocumentRequest(
                    format: "txt",
                    document: fs.createReadStream("C:/Temp/02_pages.pdf"),
                );
var outputFile = "C:/Temp/ConvertPDFtotxt.txt";
wordsApi.convertDocument(request).then((result) =>     
    console.log(result.response.statusCode);    
    console.log(result.body.byteLength);    
    fs.writeFileSync(outputFile, result.body);
).catch(function(err) 
    // Deal with an error
    console.log(err);
);

【讨论】:

以上是关于我可以使用 Node.js 阅读 PDF 或 Word 文档吗?的主要内容,如果未能解决你的问题,请参考以下文章

Node.js ENOENT 读取 PDF 文件

Node.js 和 Nodemailer:我们可以将 PDF 文档附加到电子邮件中吗?

最常用的生成 PDF 报告的方法(JavaScript、node.js)?

如何在 node.js 中生成 PDF

模块化方式构建Node.js应用程序

Node.js 或使用 mongodb 服务器 [关闭]