electron 如何使用nodejs读取docx文件?

bkkx9g8r  于 2023-05-04  发布在  Electron
关注(0)|答案(3)|浏览(387)

如上面的标题。现在我正在制作一个电子应用程序,其功能是显示docx文件的内容,其中包括文字和图像。有没有人知道一个nodejs库可以做到这一点?

dphi5xsq

dphi5xsq1#

这个问题我已经问过几次了(所以很想听听你最后用的是什么)。
我们已经使用了Texract(https://www.npmjs.com/package/textract)(NB.有一个Python包和一个AWS服务,它们具有相同的名称;这两个都是不相关的。)它只是把纯文本拿出来。它一直在努力与一些格式,特别是PDF。如果你还想要图像和格式,这并不是你真正想要的。
Google很快找到了这个列表:https://libraries.io/search?keywords=docx&languages=JavaScript
猛犸(https://github.com/mwilliamson/mammoth.js)正在积极开发中。注意它所描述的限制。然而,它产生HTML的事实将使您在Electron应用程序中的显示更加容易。
LibreOffice-convert(https://github.com/elwerene/libreoffice-convert)对我来说是新的,因为我上次搜索。利用LibreOffice听起来是一件明智的事情。它只是LibreOffice无头模式的一个简单 Package 。依赖性使它不太适合Electron应用程序。
同样,您可以尝试使用pandoc的 Package 器(https://github.com/eshinn/node-pandoc)。

ewm0tg9j

ewm0tg9j2#

2021年7月

如果你只想使用DOCX或纯文本,你可以使用textract-lite

textract中提供更多文档类型(10+)

yarn add @nosferatu500/textract

https://github.com/nosferatu500/textract

yarn add @nosferatu500/textract-lite

https://github.com/nosferatu500/textract-lite

**注意:**当发现各种CVE时,我分叉并更新了deps。我还砍掉了轻量级版本的所有功能,只留下对docx和txt的支持

y1aodyip

y1aodyip3#

const {DOMParser} = require('xmldom');
const xpath  = require("xpath");
const JsZip = require("jszip");
const fs = require("fs");

//需要添加declare:"} docxInputPath =“”“";

// Read the docx internal xdocument
let wSelect = xpath.useNamespaces({"w": "http://schemas.openxmlformats.org/wordprocessingml/2006/main"});
let docxFile = fs.readFileSync(docxInputPath);
await JsZip.loadAsync(docxFile).then(async (zip) => {
    await zip.file('word/document.xml').async("string").then(docx_str =>  
    {
        let docx = new DOMParser().parseFromString(docx_str);
        let outputString = "";
        let paragraphElements = this.wSelect("//w:p",docx);
        paragraphElements.forEach(paragraphElement => 
        {
            let textElements = this.wSelect(".//w:t",paragraphElement);
            textElements.forEach(textElement => outputString += textElement.textContent);
            if(textElements.length > 0)
                outputString += "\n";
        });
        fs.writeFileSync(strOutputPath,outputString);
    });
});

相关问题