Как можно задать размер страницы, ориентацию страницы и поля страницы таблицы ods с помощью ODFDOM?

ODFDOM проекта инкубации Apache позволяет пользователям программно читать и создавать различные файлы в формате открытого документа, включая электронные таблицы.

Я пытаюсь установить различные параметры печати для создаваемой таблицы, используя обновленный "Простой API", однако, похоже, они еще не предоставили простой способ изменения свойств документа, таких как поле страницы, размер страницы (высота) / ширина) и ориентация страницы (альбомная / книжная).

Мне нужно перейти от SpreadsheetDocument к чему-то, что позволит мне изменить эти значения.

1 ответ

Решение

Необходимые вызовы могут быть сделаны для некоторых базовых объектов ODF, к которым SpreadsheetDocument предоставляет доступ. Во-первых, нам нужно получить правильную ссылку на свойства документа (для всех примеров "электронная таблица" - это ссылка на созданный SpreadsheetDocument):

    StyleMasterPageElement defaultPage = spreadsheet.getOfficeMasterStyles().getMasterPage("Default");
    String pageLayoutName = defaultPage.getStylePageLayoutNameAttribute();
    OdfStylePageLayout pageLayoutStyle = defaultPage.getAutomaticStyles().getPageLayout(pageLayoutName);
    PageLayoutProperties pageLayoutProps = PageLayoutProperties.getOrCreatePageLayoutProperties(pageLayoutStyle);

Затем мы можем установить различные свойства, такие как поля, ориентация и высота / ширина. Обратите внимание, что значения высоты и ширины, по-видимому, необходимы для правильной работы значения ориентации страницы, а высота и ширина объявления должны соответствовать высоте и ширине используемой ориентации:

    pageLayoutProperties.setPageHeight(pageHeightInMM);
    pageLayoutProperties.setPageWidth(pageWidthInMM);
    pageLayoutProperties.setPrintOrientation(PrintOrientation.LANDSCAPE);
    pageLayoutProperties.setMarginLeft(leftMarginInMM);
    pageLayoutProperties.setMarginRight(rightMarginInMM);
    pageLayoutProperties.setMarginTop(topMarginInMM);
    pageLayoutProperties.setMarginBottom(bottomMarginInMM);

Я основал это на заметках другого разработчика о том, как это сделать с помощью исходных API ODFDOM, и смог успешно изменить свойства сгенерированного документа с помощью этого кода.

Другие вопросы по тегам