Скопируйте весь раздел документа ODT (Openoffice Writer) в другой документ с помощью Openoffice Java API (UNO API) - PullRequest
4 голосов
/ 18 августа 2010

Мне нужно использовать Java API OpenOffice, чтобы скопировать раздел документа и вставить его поверх другого раздела документа. До сих пор мне удалось скопировать текст раздела исходного документа и вставить его поверх раздела в целевом документе (см. Пример ниже).

Однако проблема в том, что нетекстовые элементы (графика, форматы, таблицы и т. Д.) Не вставляются в целевой документ.

Код, который я использовал для извлечения текста исходного раздела:

// Read source file text
XComponent xComponentSource = this.ooHelper.loadDocument("file://" + fSource);
// Get sections
XTextSectionsSupplier textSectionsSupplierSource = (XTextSectionsSupplier)UnoRuntime.queryInterface(XTextSectionsSupplier.class, xComponentSource);
XNameAccess nameAccessSource = textSectionsSupplierOrigen.getTextSections();
// Get sections by name
XTextSection textSectionSource = (XTextSection)UnoRuntime.queryInterface(XTextSection.class, nameAccessOrigen.getByName("SeccEditable"));
//Get section text
String sectionSource = textSectionSource.getAnchor().getString();

Чтобы вставить текст в целевой раздел, код для выбора раздела такой же, и я установил строку:

textSectionDest.getAnchor().setString(sectionSource);

Я прочитал API Javadoc и не нашел способа скопировать весь раздел. Есть ли способ сделать это?

1 Ответ

1 голос
/ 22 февраля 2011

У меня была такая же проблема. В итоге я решил создать два курсора: один в начале содержимого того, что я хотел дублировать, затем другой в конце содержимого, используя, затем расширив выбор курсора от первого до второго. При этом использовался метод gotoRange для первого курсора, передавая второй курсор и значение True, чтобы сообщить ему о расширении выделения.

Пример курсора: http://api.openoffice.org/docs/DevelopersGuide/Text/Text.xhtml#1_3_1_1_Editing_Text

Затем я создал контейнер автотекста, группу и элемент, содержащий выделение. и вставил / вставил содержимое в позицию курсора, используя метод applyTo записи автотекста. Я использовал guid для имени контейнера autoText, чтобы он был уникальным, а затем удалил контейнер, когда закончил.

Пример автотекста: http://api.openoffice.org/docs/DevelopersGuide/Text/Text.xhtml#1_3_1_6_Auto_Text

Я могу опубликовать свой код, если хотите, однако он написан на Python.

...