it-roy-ru.com

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

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

13
Shamoon

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

Это можно сделать с помощью служб Livedocx например

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

8
Tim

textract это отличная библиотека, которая поддерживает PDF, Doc, Docx и т. д. 

13
James_1x0

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

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

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

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

7
timoxley

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

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

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


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

3
Tracker1

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

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

2
iwayankit

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

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

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

2
Philip Kirkbride

Для разбора pdf файлов вы можете использовать pdf2json модуль узла

Это позволяет конвертировать PDF-файл в JSON, а также в необработанные текстовые данные.

2
Vlad Bezden

Вот пример, показывающий, как загрузить и извлечь текст из 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));
0
sdgfsdh