我找不到任何可以完成这个任务的包。我知道PHP有很多用于处理PDF的库(比如http://www.fpdf.org/),但是Node.js有没有类似的库呢?
textract 是一个出色的库,支持PDF、Doc、Docx等格式。
看起来有几个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中调用它。
.docx
而不是.doc
,因此它们也可能是选项。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();
如果你只需要将Word文档转换为HTML,那么另一个很好的选择是Mammoth.js。
Mammoth旨在将Microsoft Word创建的.docx文档转换为HTML,并通过使用文档中的语义信息并忽略其他细节来生成简单而干净的HTML。例如,Mammoth将任何样式为“标题1”的段落转换为h1元素,而不是试图精确复制标题的样式(字体、文字大小、颜色等)。
由于.docx使用的结构与HTML的结构之间存在较大的不匹配,因此对于更复杂的文档,转换可能不太完美。 如果你只使用样式对文档进行语义标记,则Mammoth效果最佳。
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));
const { WordsApi, ConvertDocumentRequest } = require("asposewordscloud");
const fs = require('fs');
// Get Customer ID and Customer Key from https://dashboard.aspose.cloud/
wordsApi = new WordsApi("xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", "xxxxxxxxxxxxxxxxxxxx");
const request = new ConvertDocumentRequest({
format: "txt",
document: fs.createReadStream("C:/Temp/02_pages.pdf"),
});
const 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);
});