【发布时间】:2012-02-20 17:36:26
【问题描述】:
我找不到任何包来执行此操作。我知道 PHP 有大量的 PDF 库(如 http://www.fpdf.org/),但对于 Node 有什么?
【问题讨论】:
我找不到任何包来执行此操作。我知道 PHP 有大量的 PDF 库(如 http://www.fpdf.org/),但对于 Node 有什么?
【问题讨论】:
textract 是一个很棒的库,支持 PDF、Doc、Docx 等。
【讨论】:
.doc 文件,在 windows 中不起作用。
看起来有一些 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 轻松调用它
【讨论】:
您可以轻松地将一个文件转换为另一个文件,或者使用例如 .doc 模板来生成一个 .pdf 文件,但您可能希望使用现有的 Web 服务来完成此任务。
这可以使用Livedocx 的服务来完成,例如
要从节点使用此服务,请参阅node-livedocx(免责声明:我是此节点模块的作者)
【讨论】:
我建议您查看unoconv 进行初始转换,这使用LibreOffice 或OpenOffice 进行实际转换。这会增加一些开销。
我会设置一些工作人员来设置所有必需品,并使用请求/响应队列来处理转换...(可能需要查看 kue 或 zmq)
一般来说,这是一个 CPU 密集型和繁重的任务,应该卸载... Pandoc 和其他人特别提到 .docx,而不是 .doc,所以它们可能也可能不是选项。
注意:我知道这个问题很老,只是想为遇到此问题的其他人提供当前答案。
【讨论】:
您可以将 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();
我希望这会有所帮助。
【讨论】:
解析pdf文件可以使用pdf2json节点模块
它允许您将 pdf 文件转换为 json 以及原始文本数据。
【讨论】:
如果您只需要从 Word 文档转换,另一个不错的选择是 Mammoth.js。
Mammoth 旨在转换 .docx 文档,例如那些创建的 通过 Microsoft Word,并将它们转换为 HTML。猛犸象的目标是生产 通过使用文档中的语义信息,简单而干净的 HTML, 并忽略其他细节。例如,猛犸象将任何 具有样式 Heading 1 到 h1 元素的段落,而不是 试图完全复制样式(字体、文本大小、颜色等) 标题。
.docx 使用的结构与 HTML 的结构,这意味着转换不太可能是 非常适合更复杂的文档。猛犸象是最好的,如果你只 使用样式在语义上标记您的文档。
【讨论】:
这是一个示例,展示了如何使用 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));
【讨论】:
您可以使用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);
});
【讨论】: