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タグなどがありませんか?
ローカルファイル(blank
folderにあるものすべて)へのajaxCallsのため、このコードはJSFiddleでは機能しません。または、すべてのファイルをByteArray形式で入力し、jsFiddle
echo APIを使用する必要があります。 : http://doc.jsfiddle.net/use/echo.html
docxtemplater (作成したライブラリ)を使用して、テンプレートからDocxドキュメントを生成できます。
タグ(テンプレートエンジンなど)で値を置き換えたり、有料版の画像を置き換えたりすることができます。
テンプレートエンジンのデモは次のとおりです。 https://docxtemplater.com/demo/
これは古い質問であり、あなたはすでに答えを持っていることを知っていますが、これを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 またはサーバー側のソリューションを調査しています。
コードごとに正しいことを実行していますが、ファイルは有効なdocxファイルではありません。 docx.jsのdocx()
関数を見ると、docxファイルは実際には複数のxmlファイルを含むZipであることがわかります。