我可以用Node.js阅读PDF或Word Docs吗?

时间:2012-01-27 18:28:23

标签: pdf node.js ms-word npm

我找不到任何包来做这件事。我知道PHP有大量的PDF库(比如http://www.fpdf.org/),但有什么用于Node?

9 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:8)

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

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

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

答案 2 :(得分:7)

看起来有一些pdf,但我找不到任何Word。

这样的CPU绑定处理实际上并不是Node的强项(即使用节点比任何其他语言都没有获得额外的好处)。务实的方法是找到一个好的工具并从Node中使用它。

我在办公室里听到过有关docsplit http://documentcloud.github.com/docsplit/

的好消息

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

轻松地从Node调用它

答案 3 :(得分:4)

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

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

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


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

答案 4 :(得分:3)

您可以将pdf文本用于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文件,你可以使用猛犸象,它将从.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();

我希望这会有所帮助。

答案 5 :(得分:2)

对于解析pdf文件,您可以使用pdf2json节点模块

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

答案 6 :(得分:2)

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

  

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

     

.docx和.docx使用的结构之间存在很大的不匹配   HTML的结构,意味着转换不太可能   非常适合更复杂的文档。如果只是你,猛犸象的效果最好   使用样式来语义标记文档。

答案 7 :(得分:0)

以下示例说明如何使用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));

答案 8 :(得分:0)

您可以使用 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);
});