Generate a Word document in JavaScript with Docx.js?

后端 未结 6 1860
没有蜡笔的小新
没有蜡笔的小新 2020-12-05 11:19

I am trying to use docx.js to generate a Word document but I can\'t seem to get it to work.

I copied the raw code into the Google Chrome console after amending line

6条回答
  •  Happy的楠姐
    2020-12-05 12:21

    I know this is an older question and you already have an answer, but I struggled getting this to work for a day, so I thought I'd share my results.

    Like you, I had to fix the textAlign bug by changing the line to this:

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

    Also, it didn't handle HTML comments. So, I had to add the following line above the check for a "#text" node in the for loop:

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

    To create the docx was tricky since there is absolutely no documentation on this thing as of yet. But looking through the code, I see that it is expecting the HTML to be in a File object. For my purposes, I wanted to use the HTML I rendered, not some HTML file the user has to select to upload. So I had to trick it by making my own object with the same property that it was looking for and pass it in. To save it to the client, I use FileSaver.js, which requires a blob. I included this function that converts base64 into a blob. So my code to implement it is this:

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

    In the end, this would work for simple Word documents, but isn't nearly sophisticated for anything more. I couldn't get any of my styles to render and I didn't even attempt to get images working. I've since abandoned this approach and am now researching DocxgenJS or some server-side solution.

提交回复
热议问题