Могу ли я читать документы PDF или Word с помощью Node.js?

Я не могу найти никаких пакетов для этого. Я знаю, что у PHP есть тонна библиотек для PDF файлов (например http://www.fpdf.org/), но что-нибудь для Node?

Ответы

Ответ 1

Вы можете легко преобразовать один в другой или использовать, например, шаблон .doc для создания файла .pdf, но вы, вероятно, захотите использовать существующий веб-сервис для этой задачи.

Это можно сделать, используя службы Livedocx, например

Чтобы использовать эту услугу из node, см. node-livedocx (Отказ от ответственности: я являюсь автором этого модуля node)

Ответ 2

textract - отличная библиотека, поддерживающая файлы PDF, Doc, Docx и т.д.

Ответ 3

Похоже, есть несколько для pdf, но я не нашел для Word.

Обработка привязки к процессору, как это ни в коем случае не является Node сильной точкой (т.е. вы не получаете никаких дополнительных преимуществ, используя Node, чтобы сделать это на любом другом языке). Прагматичным подходом было бы найти хороший инструмент и использовать его из Node.

Я слышал хорошие вещи вокруг офиса о docsplit http://documentcloud.github.com/docsplit/

Пока он не Node, вы можете легко вызвать его из Node с помощью http://nodejs.org/docs/latest/api/all.html#child_process.exec

Ответ 4

Я бы предложил посмотреть unoconv для вашего первоначального преобразования, это использует LibreOffice или OpenOffice для фактического преобразования. Что добавляет некоторые накладные расходы.

Я бы установил несколько сотрудников со всеми необходимыми настройками и использовал очередь запросов/ответов для обработки преобразования... (может захотеть заглянуть в kue или zmq)

В общем, это связанная с процессором и тяжелая задача, которая должна быть выгружена... Pandoc и другие специально упоминают .docx, а не .doc, поэтому они могут быть и не быть параметрами.


Примечание. Я знаю, что этот вопрос старый, просто хотел предоставить текущий ответ для других, которые сталкиваются с этим.

Ответ 5

Для разбора PDF файлов вы можете использовать pdf2json node module

Он позволяет вам конвертировать PDF файл в json, а также в исходные текстовые данные.

Ответ 6

Еще один хороший вариант, если вам нужно конвертировать только документы Word, Mammoth.js.

Мамонт предназначен для преобразования документов .docx, таких как созданные Microsoft Word и конвертировать их в HTML. Мамонт стремится производить простой и чистый HTML с использованием семантической информации в документе, и игнорирование других деталей. Например, Мамонт преобразует любые абзаца со стилем Заголовок от 1 до h1 элементов, а не пытаясь точно скопировать стиль (шрифт, размер текста, цвет и т.д.), заголовка.

Там большое несоответствие между структурой, используемой .docx и структуры HTML, что означает, что преобразование вряд ли будет идеально подходит для более сложных документов. Мамонт лучше всего работает, если только используйте стили для семантической маркировки вашего документа.

Ответ 7

вы можете использовать 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();

Надеюсь, это поможет.

Ответ 8

Вот пример, показывающий, как загрузить и извлечь текст из PDF с помощью PDF.js:

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));