Odftoolkit ODT применяет стиль к строке таблицы, чтобы не допускать разрыва страницJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Odftoolkit ODT применяет стиль к строке таблицы, чтобы не допускать разрыва страниц

Сообщение Anonymous »

Я пытаюсь создать документ OpenOffice Writer (ODT) или создать его с помощью Simple API из ODFToolkit. У нас есть таблица, которая динамически заполняется N строками. Он может быть разделен на несколько страниц, и это нормально. Но у нас есть требование, чтобы строки НЕ разделялись по страницам — и всякий раз, когда это происходит, строка, которая разделяется, должна перемещаться на следующую страницу и начинаться оттуда.
При использовании графического пользовательского интерфейса в LibreOffice мы выполняем вышеуказанное требование, щелкнув правой кнопкой мыши по таблице, выбрав «Свойства» (который открывает диалоговое окно «Свойства таблицы»), перейдя на «Поток текста» (вторая вкладка) и сняв флажок «Разрешить разбивку строки по страницам и столбцам» < /p>
Изображение

Мы пытаемся сделать это программно, но у нас ничего не получается.Точная зависимость Maven, которую я использую (причина, по которой мы не пошли дальше, заключается в том, что версии выше этой, похоже, требуют Java> 1.7, в то время как мы застряли на Java 7):

org.apache.odftoolkit
simple-odf
0.8.2-incubating
jar-with-dependencies


Я создал образец тестового кода, который можно использовать в качестве игровой площадки. TL;DR Кажется, я нашел что-то, что любезно работает, не знаю, насколько надежно, но это уже что-то.
Мы пытались сделать следующее:
  • опираться на предположение, что каждая новая строка должна наследовать стиль предыдущей строки и, в любом случае, наследовать атрибуты стиля родительской таблицы
  • чтобы применить Атрибут стиля «может разрываться между строками» таблицы, судя по тому, как этот атрибут кажется «родительским» для нужного нам стиля (что-то, что означало бы, что «строка» может разрываться между страницами) (что, похоже, это не так).
Из сохраненного документа (я разархивирую его, поскольку файлы ODT представляют собой заархивированные архивы), проверив content.xml, я пришел к выводу, что есть еще один атрибут называется fo:keep-together со значениями AUTO и ALWAYS, что, похоже, также играет роль в стилях, которых мы хотим достичь.
Учтите, что документ, который мы открываем, уже содержит таблицу с именем «Таблица2», и, похоже, уже существует автоматический стиль с именем «Таблица2.1», содержащий атрибут «держать вместе», вероятно, потому, что у нас есть создал и сохранил исходный тестовый ODT с указанным выше атрибут уже «снят».
Код, который не работал:
InputStream is = OdftoolkittoolTest.class.getClassLoader().getResourceAsStream("test.odt");
TextDocument textDocument = TextDocument.loadDocument(is);

Table tbl = textDocument.getTableByName("Table2");
OdfStyle odfStyle = tbl.getStyleHandler().getStyleElementForWrite();

// this indeed sets the "allow table to break between pages",
// but not the "allow row to break between pages" attribute
StyleMayBreakBetweenRowsAttribute attr =
new StyleMayBreakBetweenRowsAttribute(textDocument.getFileDom(OdfSchemaDocument.OdfXMLFile.CONTENT));
attr.setBooleanValue(true);
odfStyle.setAttributeNode(attr);

// append a single row - once we do this, and inspect the resulting document
// the "allow row to break between pages" shows as "checked" (albeit with a "minus" sign over it -
// who knows what that means..)
tbl.appendRow();

// try to re-apply the "keep together" style on all rows - just in case this works
// (it doesn't work)
for (Row r : tbl.getRowList()) {
FoKeepTogetherAttribute attr2 = new FoKeepTogetherAttribute(textDocument.getFileDom(OdfSchemaDocument.OdfXMLFile.CONTENT));
attr2.setEnumValue(FoKeepTogetherAttribute.Value.ALWAYS);
r.getOdfElement().setOdfAttribute(attr2);
}

File targetFile = new File("c:\\temp\\lala.odt");
textDocument.save(targetFile);


Подробнее здесь: https://stackoverflow.com/questions/793 ... ross-pages
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»