生成的JavaScript与Docx.js Word文档?(Generate a Word docu

2019-08-20 21:03发布

我试图用docx.js生成一个Word文档,但我似乎无法得到它的工作。

我复制的原始代码到谷歌浏览器控制台修改行247后修复“‘textAlign设置’未定义错误”

if (inNode.style && inNode.style.textAlign){..}

这使得功能convertContent可用。 其结果是一个对象例如

JSON.stringify( convertContent($('<p>Word!</p>)[0]) )

结果是 -

"{"string":
      "<w:body>
            <w:p>
                <w:r>
                    <w:t xml:space=\"preserve\">Word!</w:t>
                </w:r>
            </w:p>
       </w:body>"
 ,"charSpaceCount":5
 ,"charCount":5,
 "pCount":1}"

我复制

<w:body>
    <w:p>
        <w:r>
            <w:t xml:space="preserve">Word!</w:t>
        </w:r>
    </w:p>
</w:body>

到记事本++并将其保存为与“DOCX”的扩展名的文件,但是当我在MS Word中打开它,但它说,“不能打开,因为有与内容的问题”。

我缺少一些属性或XML标签的东西?

Answer 1:

此代码不能在工作的jsfiddle因为AjaxCalls的本地文件(即在一切的blank文件夹中),或者你应该ByteArray的格式输入的所有文件和使用jsFiddle回声API: HTTP://doc.jsfiddle。网络/应用/ echo.html



Answer 2:

您可以使用的模板生成一个文件DOCX docxtemplater (库我已创建)。

它可以通过自己的价值观(如模板引擎)更换标签,并在付费版本也更换图片。

这里是模板引擎的演示: https://docxtemplater.com/demo/



Answer 3:

你会发现这个链接有用的,

http://evidenceprime.github.io/html-docx-js/

在线演示在这里:

http://evidenceprime.github.io/html-docx-js/test/sample.html



Answer 4:

我知道这是一个老问题,你已经有了一个答案,但我努力让这一天的工作,所以我想我会分享我的结果。

和你一样,我不得不修正textAlign通过改变行这个错误:

if (inNode.style && inNode.style.textAlign)

此外,它没有处理HTML注释。 所以,我不得不添加检查上面下面一行在一个“#text”节点for循环:

if (inNodeChild.nodeName === '#comment') continue;

要创建的docx是棘手,因为有这个东西作为尚未完全没有文档。 但翻翻代码,我看到它期待HTML是在一个文件对象。 对于我而言,我想用我呈现的HTML,而不是一些HTML文件,用户必须选择上传。 所以,我不得不让我自己的对象与它寻找同样的属性,以诱骗和传递。将它保存到客户端,我用FileSaver.js ,这需要一个blob。 我包括这个功能是转换的base64成团块。 所以,我的代码来实现它是这样的:

var result = docx({ DOM: $('#myDiv')[0] });
var blob = b64toBlob(result.base64, "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
saveAs(blob, "test.docx");

最终,这将工作简单的Word文档,但不是任何东西更接近成熟。 我不能让我的任何方式来呈现,我甚至没有尝试获取工作的图像。 我已经抛弃这种做法,我现在研究DocxgenJS或者一些服务器端解决方案。



Answer 5:

你正在做的东西codewise正确的,但你的文件是不是有效的docx文件。 如果你看一下通过docx()在docx.js功能,你会看到一个的docx文件实际上是一个包含若干XML文件的zip。



Answer 6:

我使用Open XML SDK为JavaScript。

http://ericwhite.com/blog/open-xml-sdk-for-javascript/

基本上,Web服务器上,我有一个空的docx文件作为新的模板。 当用户在浏览器中单击新的docx文件,我将检索空的docx文件作为模板,将其转换为Base64并返回它作为Ajax响应。

在客户端脚本,将转换为BASE64字符串字节数组,并使用openxmlsdk.js加载字节数组作为一个JavaScript的OpenXmlPackage对象。

一旦你已经加载的包,你可以使用普通OpenXmlPart创建一个真正的文件。 (插入图像,创建表/行)。

最后一步是流出来到最终用户为一个文件。 这部分是与安全相关的。 在我的代码发送回网络服务器和被暂时保存。 并准备一个HTTP响应,通知最终用户下载。

检查URL以上,有在JavaScript这样做的有用的样本。



文章来源: Generate a Word document in JavaScript with Docx.js?