2017-03-18 7 views
0

jOpenDocumentライブラリを使用してjavaからテンプレートを記入しようとしています。ODTドキュメントのjOpenDocumentフィールドの新しい行

フィールド内で新しい行を開始したい。 通常の改行記号(\ n)は機能しません。

ドキュメントでこれを手動で行い、xmlファイル(content.xml)を見ると、なぜこれが機能しないのかがわかります。フィールドの新しい行ごとに、別の段落があります。

多分、1つのオブジェクトに複数の段落を組み合わせて、複数の段落オブジェクトでsetField()を呼び出す方法があります。しかし今まで私は解決策を見いださなかった。

コード例:基本的に

EngineTemplate template = new RhinoTemplate(templateFile); 
template.setField("nameField", "this is the content\nI wish to be multilined"); 
+0

あなたはこれを行うために使用しているあなたのコードのスニペットを提出することができればそれが役立つだろう。 – Kainix

+0

コードを追加しました –

答えて

0

\nは、デフォルトではスキップされますが、%enc:とあなたのテンプレートに自分のフィールド名を開始することによって、それを変更することができます。ここで

org.jopendocument.dom.template.engine.Processorクラスのドキュメントからの説明です:

は、前処理されたテンプレートコンテンツから最終文書の内容を生成します。 フィールドの置換の動作は接頭辞で制御することができます。

AS_STR 次の式では、文字列として置換されたことになります。 XML要素の場合、ツリーが出力されます。

ENCODE 下記式(のtoStringで文字列に変換され)、次いでorg.jopendocument.dom.OOXML.encodeWS(java.lang.String)を使用して符号化されます。

OO_XML 次の式はtoString()で文字列に変換され、OO XMLとして解析されます。

これらのどれも指定されていない場合、XML要素は移植されるOO XML(その子のみ)として扱われます。そうでない場合、値は単にフィールドのテキストとして設定されます。

そしてENCODEフィールドが宣言されています:

public static final String ENCODE = "%enc:"; 
+0

少し例を挙げてください。私はsetField( "nameField"、Processor.ENCODE + "multlined \ ncontent");を試みましたが、これはうまくいきませんでした。フィールドの内容は、%enc:multilined contentでした。 –

+0

私は解明のために答えを編集しました。プレフィックスは、テンプレート内の名前のためのもので、Javaでの使用ではありません。だから、あなたのフィールドにはテンプレート '%enc:nameField'に名前をつけ、javaでは' setField( "nameField"、 "multlined \ ncontent"); ' – glw

関連する問題