Изображения внутри документа .odt: узнать, где они находятся, и скопировать их в другой документ

Я разрабатываю приложение, которое открывает один или несколько документов .odt и позволяет N разным клиентам просматривать и редактировать эти документы, а не одну и ту же часть одновременно. Дело в том, что мне нужно скопировать часть или весь документ в другой новый документ, чтобы другой клиент мог его редактировать.

Чтобы скопировать документ, я получаю по одному абзацу в исходном документе и копирую его в новый редактируемый документ. До сих пор у меня не было проблем с текстом (кстати, благодаря stackoverflow), но я не могу узнать, является ли текущий абзац текстом или графикой, и скопировать эту графику; на самом деле графика интерпретируется как пустой абзац.

Я уже видел несколько ответов, включая экспорт изображений и графику в файлах doc в изображения в openoffice, что было несколько полезно, но не соответствует моим потребностям, так как мне нужно знать, где находится изображение, и поместить его в новый документ в том же порядке, что и оригинал. один.

Открыв документ, прежде чем что-либо с ним делать, у меня есть этот код для его обработки:

XTextDocument xTextDocument = (XTextDocument)UnoRuntime.queryInterface( XTextDocument.class,xComp );
XText xText = xTextDocument.getText();//Get the text from the open document
XEnumerationAccess xEnumerationAccess = (XEnumerationAccess)UnoRuntime.queryInterface( XEnumerationAccess.class,xText );
XEnumeration xParagraphEnumeration = xEnumerationAccess.createEnumeration();//Get every paragraph in the document
try
{
    while ( xParagraphEnumeration.hasMoreElements() ) 
    {
        XTextContent xTextElement = (XTextContent)UnoRuntime.queryInterface( XTextContent.class,xParagraphEnumeration.nextElement() );
        aParagraphs.add(xTextElement);//Store the paragraphs
        
        XServiceInfo xServiceInfo = (XServiceInfo)UnoRuntime.queryInterface( XServiceInfo.class,xTextElement );
        System.out.println("Document(Document,Index - Supported Services");
        String [] aS = xServiceInfo.getSupportedServiceNames();//What are your supported services?
        for( int i=0 ; i<aS.length ; i++ )
            System.out.println("Document(Document,Index) - " + aS[i]);
        if( xServiceInfo.supportsService("com.sun.star.text.TextGraphicObject") )//Are you a graphic?
            System.out.println("Document(Document,Index) - This is a graphic.");
        else if( xServiceInfo.supportsService("com.sun.star.text.Paragraph") )//Are you text??
        {
            //b.copyParagraphFormat(j,xTextCursor);
            //xText.insertTextContent(xTextCursor, b.getParagraphs().get(j), false);
            //xText.insertString(xTextCursor, b.getParagraphs().get(j).getAnchor().getString(), false);
            System.out.println("Document(Document,Index) - This is text.");
        }
        else //Are you anything else?
            System.out.println("Document(Document,Index) - This isn't either graphic nor text??");
        
    }
}

Обработка документа с несколькими абзацами и изображением приводит к следующему результату:

Документ(Документ,Индекс — Поддерживаемые службы

Документ(Документ,Индекс) - com.sun.star.text.TextContent

Документ(Документ,Индекс) - com.sun.star.text.Paragraph

Документ(Документ,Индекс) - com.sun.star.style.CharacterProperties

Документ(Документ,Индекс) - com.sun.star.style.CharacterPropertiesAsian

Документ (Документ, Индекс) - com.sun.star.style.CharacterPropertiesComplex

Документ(Документ,Индекс) - com.sun.star.style.ParagraphProperties

Документ (Документ, Индекс) - com.sun.star.style.ParagraphPropertiesAsian

Документ (Документ, Индекс) - com.sun.star.style.ParagraphPropertiesComplex

Документ(Документ,Индекс) - это текст

Не только для текстовых абзацев (что правильно), но и для изображения тоже. Наконец, мой вопрос: как я могу узнать, является ли данный XTextContent текстовым или графическим? Или, может быть, вопрос должен быть: как я могу заставить код обрабатывать графику как графику, а не как абзац (смысл, текст)??

Извините за мой английский и длинный пост, и заранее спасибо.


person Kvothe    schedule 31.07.2014    source источник
comment
Почему бы не скопировать весь документ (Сохранить как...), а затем удалить ненужные части?!   -  person ngulam    schedule 01.08.2014
comment
Мне нужно программно создать новый документ и контролировать открытые документы и редактируемые части.   -  person Kvothe    schedule 01.08.2014