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

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

【问题讨论】:

    标签: pdf node.js ms-word npm


    【解决方案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 进行实际转换。这会增加一些开销。

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

    一般来说,这是一个 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);
              });
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2018-12-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-01-04
                相关资源
                最近更新 更多