14

docx.jsを使用して Word ドキュメントを生成しようとしていますが、うまく動作しないようです。

「'textAlign' 未定義エラー」を修正するために 247 行目を修正した後、未加工のコードを Google Chrome コンソールにコピーしました。

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 タグまたは何かが欠落していますか?

4

6 に答える 6

21

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

タグをその値で置き換えることができ (テンプレート エンジンのように)、有料版の画像を置き換えることもできます。

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

于 2013-07-24T13:29:41.690 に答える
4

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

于 2013-06-05T13:30:18.413 に答える
2

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

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

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

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

于 2017-04-05T03:00:10.017 に答える
2

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

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

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

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

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

このことに関するドキュメントはまだまったくないため、docx を作成するのは難しい作業でした。しかし、コードを調べてみると、HTML が File オブジェクトにあると想定されていることがわかります。私の目的のために、ユーザーがアップロードするために選択しなければならない HTML ファイルではなく、レンダリングした HTML を使用したかったのです。そのため、探していたのと同じプロパティを持つ独自のオブジェクトを作成して渡すことで、それをだます必要がありました。それをクライアントに保存するには、blob を必要とするFileSaver.jsを使用します。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またはサーバー側のソリューションを研究しています。

于 2014-09-12T14:26:11.900 に答える
0

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

于 2013-06-04T11:27:00.620 に答える