我可以使用 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 和 Nodemailer:我们可以将 PDF 文档附加到电子邮件中吗?