OpenOffice、サーブレット応答へのドキュメントの書き込み
-
29-09-2019 - |
質問
現在、OpenOfficeを使用して、テンプレートファイルドキュメントでブックマークをつかみ、Java経由でDBのコンテンツに置き換えます。ファイルを実際に保存するコードの行は、このように見えます...
XStorable storable = UnoRuntime.queryInterface(XStorable.class, document);
// Save as Word 97 Document
PropertyValue[] properties = new PropertyValue[1];
PropertyValue property = new PropertyValue();
property.Name = "FilterName";
property.Value = FORMAT_WORD_97;
properties[0] = property;
storable.storeAsURL(saveFileURL, properties);
ファイルをサーブレット応答に直接書き込み、outputStreamに、JavaのOpenOfficeのUNO APIを介してバイト配列または入力ストリームとしてドキュメントを直接取得する方法を知っている人はいますか?
解決
これは、UNO APIの実装に依存します。 PDFでこれを行うことができました、
OutputStream os = response.getOutputStream();
PropertyValue[] properties = new PropertyValue[2];
PropertyValue property = new PropertyValue();
property.Name = "FilterName";
property.Value = FORMAT_WORD_97;
properties[0] = property;
PropertyValue streamProp = new PropertyValue();
streamProp.Name = "OutputStream;
streamProp.Value = os;
properties[1] = streamProp;
storable.storeAsURL("private:stream", properties);
他のヒント
ファイルを最初に(UNO APIから)ローカルに保存し、[TEMP]ファイルを削除する前にJavaコードの結果をストリーミングすることをお勧めします。この理由は、OpenOfficeによるドキュメントの生成に関する問題をクライアントへの配信から分離できるためです。たとえば、ドキュメントが生成に失敗した場合、クライアントにストリーミングされた部分的に書かれた応答について懸念なくエラーを生成できます。また、あなたがまだツールを見ていないなら、あなたは見たいかもしれません ドキュマシス これにより、冗長性、パフォーマンスの最適化、データマージ機能が提供されます。それはあなたが提供するストリームに直接レンダリングすることができます(そしておそらく部分的に散らばった反復的な問題を処理するでしょう)。
所属していません StackOverflow