2017-08-11 4 views
0

私は、LibreOffice SDKとApache Batikを使ってJavaでレポートプリンタを作成しています。 Batikを使用して、私はsvgを描き、それをLibreOffice Writerドキュメントに挿入します。イメージを正しく挿入するには、パスを使用してディスクからイメージをロードし、ドキュメントに挿入するだけです。これまでのところ良いことですが、ドキュメントをlibreofficeに再度読み込むために、ドキュメントをディスクに明示的に保存する必要があります。libreofficeライター文書の画像を置き換えるためのデータURL /バイナリを挿入するにはどうすればよいですか?

私はイメージパスとしてデータURLを使用しようとしましたが、動作しませんでした。ファイルをディスクに保存せずに使用できるストリームなどから画像を読み取る方法はありますか?

答えて

0

解決策が見つかりました。私が追加したすべての画像が単なる画像リンクであることに気付いたとき、私はそれをどうやって行うのか気づいた。だから私は代わりに画像を埋めなければならなかった。

これを使用するには、以下のものが必要です。XComponentContext

  • A TextGraphicObjectへ

    • アクセスをドキュメント内のバイト[]として
    • 画像(上記のリンクを参照)または別のストリームを使用し

    コード:

    Object graphicProviderObject = xComponentContext.getServiceManager().createInstanceWithContext(
    "com.sun.star.graphic.GraphicProvider", 
    xComponentContext); 
    
    XGraphicProvider xGraphicProvider = UnoRuntime.queryInterface(
    XGraphicProvider.class, graphicProviderObject); 
    
    PropertyValue[] v = new PropertyValue[1]; 
    v[0] = new PropertyValue(); 
    v[0].Name = "InputStream"; 
    v[0].Value = new ByteArrayToXInputStreamAdapter(imageAsByteArray); 
    
    XGraphic graphic = xGraphicProvider.queryGraphic(v); 
    if (graphic == null) { 
    LOGGER.error("Error loading the image"); 
    return; 
    } 
    
    XPropertySet xProps = (XPropertySet) UnoRuntime.queryInterface(
    XPropertySet.class, textGraphicObject); 
    
    // Set the image 
    xProps.setPropertyValue("Graphic", graphic); 
    

    これは私のsvgイメージでも楽に動作しました。

    出典:https://blog.oio.de/2010/05/14/embed-an-image-into-an-openoffice-org-writer-document/

  • 関連する問題