2

現在、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);

ファイルをサーブレット応答出力ストリームに直接書き込みたいのですが、Java で OpenOffice の UNO API を介してドキュメントをバイト配列または入力ストリームとして直接取得する方法を知っている人はいますか?

4

3 に答える 3

2

これは、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);
于 2010-06-22T23:41:58.967 に答える
0

10年後にこれに遭遇した人のために、これを機能させるために出力ストリームをラップする必要がありました

PropertyValue[] properties = new PropertyValue[2];
properties[0] = new PropertyValue();
properties[0].Name = "FilterName";
properties[0].Value = "writer_pdf_Export";
properties[1] = new PropertyValue();
properties[1].Name = "OutputStream";
properties[1].Value = new OutputStreamToXOutputStreamAdapter(outputStream);
storable.storeAsURL("private:stream", properties);

これがなければ、私は遭遇し続けましたcom.sun.star.lang.DisposedException

于 2021-02-24T22:27:24.783 に答える
-1

[temp] ファイルを削除する前に、最初にファイルをローカルに (UNO API から) 保存し、Java コードから結果をストリーミングすることをお勧めします。これは、OpenOffice によるドキュメントの生成に関する問題を、クライアントへの配信から切り離すことができるためです。たとえば、ドキュメントの生成に失敗した場合、部分的に書き込まれた応答がクライアントにストリーミングされることを気にせずにエラーを生成できます。また、ツールをまだ見ていない場合は、冗長性、パフォーマンスの最適化、およびデータ マージ機能を提供するDocmosisを検討することをお勧めします。提供するストリームに直接レンダリングできます(おそらく、部分的なストリーム結果の問題を処理します)。

于 2010-06-23T07:01:43.560 に答える