2009-07-22 5 views
3

Writerドキュメントのツリー全体を取得したいと考えています。OpenOffice 3.1。 Text要素だけでなく、ツリー内のすべての要素に関するデータを収集する必要があります。OpenOffice APIを使用してドキュメントツリー全体を取得

XTextDocumentをロードしてgetText()を実行すると、XText要素が得られます。具体的には、XTextXEnumerationAccessを使用すると、TextRangeを反復するだけです。

OpenOfficeのドキュメント/DevGuide/Text/Iterating_over_Textから:

com.sun.star.text.Textの第2のインターフェースはXEnumerationAccessあります。テキストサービスでは、の段落がすべて列挙され、com.sun.star.text.Paragraphをサポートするオブジェクトが返されます。これにはテーブルが含まれます。これは、ライターがテーブルをcom.sun.star.text.TextTableサービスをサポートする特殊な段落として認識するためです。ここ

いくつかの追加のドキュメント:

段落のテキスト部分の列挙は、段落に属さないない供給内容を行いますが、テキストの流れと一緒に融合していません。これらは、段落、文字、または文字として固定されたテキストフレーム、グラフィックスオブジェクト、埋め込みオブジェクトまたは描画シェイプです。 TextPortionType "TextContent"は、文字または文字にアンカーされたコンテンツがあるかどうかを示します。 TextContent部分型がある場合は、文字または文字としてアンカーされたシェイプオブジェクトがあることがわかります。

私のテストドキュメントは、私がXTextContentXTextRangegetAnchor()を介して収集することができますかということを示しています。しかし、私が収集しているコンテンツの種類はどのようにして決めることができますか?唯一の方法はgetString()です。オブジェクトが埋め込み画像だった場合、そのデータをどのように収集するのですか?

私はC++を使用していますが、Javaのソリューションは移植性があると思います。原因が悪いの書式に回答

から移行


、このコメントは答えとして掲載されています。

ご回答ありがとうございます。

私はAPIを使用するつもりです。

文書からGrahicObjectsを収集する例を試しています。 XGraphicObjectsSupplierを使用すると、getGraphicObjects()でコレクションを取得できます。コレクションのオブジェクトはAnyで、getValueTypeName()でタイプを印刷するとXTextContentとなります。

APIには、コレクションにTextGraphicObject「サービス」が含まれていることが記載されています。どのようにインスタンスを取得するのですか?

答えて

0

あなたの質問の回答は複雑になりますが、私は理解しやすくしようとします。

  • SAXを使用してドキュメントをXMLにエクスポートすると、 の処理が容易になります。 XMLの方法を使用している場合、 XDocumentHandlerを実装し、 のドキュメントを読み取ります(必要に応じてフィルタリングする必要はありません。 )。残りの作業は、大きな文書の場合はXSLT変換またはSAXのいずれかになります。

  • あなたは XServiceInfoとJavaでUnoRuntime.queryInterface

0

で多くを再生する必要があります 、唯一のAPIを使用して希望する場合:

XComponentContext xContext = Bootstrap.bootstrap(); 
XMultiComponentFactory xMCF = xContext.getServiceManager(); 
Object oDesktop = xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", xContext); 
XDesktop xDesktop = UnoRuntime.queryInterface(XDesktop.class, oDesktop); 
XComponentLoader xCompLoader = UnoRuntime.queryInterface(XComponentLoader.class, xDesktop); 
XComponent xComp = xCompLoader.loadComponentFromURL("file:///C:/test.odt", "_blank", 0, new Boolean(true)); 
XTextDocument xDoc = UnoRuntime.queryInterface(XTextDocument.class, xComp); 
XModel xModel =UnoRuntime.queryInterface(XModel.class, xDoc); 
XDrawPageSupplier xDPS = UnoRuntime.queryInterface(XDrawPageSupplier.class, xModel); 
XDrawPage xDrawPage = xDPS.getDrawPage(); 
XShapes xShapes = UnoRuntime.queryInterface(XShapes.class, xDrawPage); 
for (int s=0;s<xDrawPage.getCount();s++) { 
    XShape xShape = UnoRuntime.queryInterface(XShape.class, xShapes.getByIndex(s)); 
    System.out.println(" -- sh.getShapeType: " + xShape.getShapeType()); 
    System.out.println(" -- sh.getPosition: " + xShape.getPosition().X + "x" + xShape.getPosition().Y); 
    System.out.println(" -- sh.getSize: " + xShape.getSize().Width + "x" + xShape.getSize().Height); 
} 
関連する問題