Могу ли я читать документы 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));