web-dev-qa-db-ja.com

Docx.jsを使用してJavaScriptでWord文書を生成しますか?

docx.js を使用してWord文書を生成しようとしていますが、機能しないようです。

生コードをGoogleにコピーしましたChrome 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>

notepad ++に保存し、拡張子が「docx」のファイルとして保存しましたが、MS Wordで開くと「内容に問題があるため開くことができません」と表示されます。

いくつかの属性やXMLタグなどがありませんか?

14
Peter

ローカルファイル(blankfolderにあるものすべて)へのajaxCallsのため、このコードはJSFiddleでは機能しません。または、すべてのファイルをByteArray形式で入力し、jsFiddle echo APIを使用する必要があります。 : http://doc.jsfiddle.net/use/echo.html

4
edi9999

docxtemplater (作成したライブラリ)を使用して、テンプレートからDocxドキュメントを生成できます。

タグ(テンプレートエンジンなど)で値を置き換えたり、有料版の画像を置き換えたりすることができます。

テンプレートエンジンのデモは次のとおりです。 https://docxtemplater.com/demo/

21
edi9999

このリンクは役に立つかもしれませんが、

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

こちらのオンラインデモ:

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

2
user9869932

これは古い質問であり、あなたはすでに答えを持っていることを知っていますが、これを1日機能させるのに苦労したので、結果を共有すると思いました。

あなたと同じように、次の行を変更してtextAlignバグを修正する必要がありました。

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

また、HTMLコメントを処理しませんでした。そのため、forループの「#text」ノードのチェックの上に次の行を追加する必要がありました。

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

Docxを作成するのは、現時点ではまだこのドキュメントがまったくないため、注意が必要でした。しかし、コードを見ると、HTMLがFileオブジェクトにあることが期待されていることがわかります。目的のために、ユーザーがアップロードするために選択する必要があるHTMLファイルではなく、レンダリングしたHTMLを使用したいと考えました。そのため、探していたものと同じプロパティを持つオブジェクトを作成して渡さなければなりません。クライアントに保存するには、 FileSaver.js を使用します。これにはblobが必要です。 Iこの関数を含むbase64をblobに変換します。それを実装するための私のコードはこれです:

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

最終的には、これは単純なWord文書で機能しますが、それ以上の機能はほとんどありません。レンダリングするスタイルを取得できず、イメージを機能させようとさえしませんでした。それ以来、私はこのアプローチを放棄し、現在、 DocxgenJS またはサーバー側のソリューションを調査しています。

1
adam0101

コードごとに正しいことを実行していますが、ファイルは有効なdocxファイルではありません。 docx.jsのdocx()関数を見ると、docxファイルは実際には複数のxmlファイルを含むZipであることがわかります。

0
Joshua Smith