我试图用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标签的东西?
此代码不能在工作的jsfiddle因为AjaxCalls的本地文件(即在一切的blank
文件夹中),或者你应该ByteArray的格式输入的所有文件和使用jsFiddle
回声API: HTTP://doc.jsfiddle。网络/应用/ echo.html
您可以使用的模板生成一个文件DOCX docxtemplater (库我已创建)。
它可以通过自己的价值观(如模板引擎)更换标签,并在付费版本也更换图片。
这里是模板引擎的演示: https://docxtemplater.com/demo/
你会发现这个链接有用的,
http://evidenceprime.github.io/html-docx-js/
在线演示在这里:
http://evidenceprime.github.io/html-docx-js/test/sample.html
我知道这是一个老问题,你已经有了一个答案,但我努力让这一天的工作,所以我想我会分享我的结果。
和你一样,我不得不修正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或者一些服务器端解决方案。
你正在做的东西codewise正确的,但你的文件是不是有效的docx文件。 如果你看一下通过docx()
在docx.js功能,你会看到一个的docx文件实际上是一个包含若干XML文件的zip。
我使用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这样做的有用的样本。