Apache POI Excel: настройка страницы Выровнять по полям страницы

У меня есть Apache POI API для работы с файлами Excel. Файл Excel создается из отчета Jasper. Сгенерированный Excel из отчета Jasper в порядке. Что я хочу, так это некоторые дополнительные вещи, которые Jasper Report не поддерживает. Например, добавить настройку страницы для печати — верхний и нижний колонтитулы. Я проигнорировал поля границ на каждой странице Excel. Но когда я добавляю верхний и нижний колонтитулы, они печатаются с некоторым запасом. Затем заметил, что на странице «Параметры страницы» в MS Excel есть флажок.

введите здесь описание изображения

Здесь флажок Align with page margins управляет полями в верхнем и нижнем колонтитулах. Если этот флажок установлен, он будет иметь то же поле, что и страница Excel.

Вопрос. Как я могу управлять этим полем флажка из Apache POI?


person Parth Bhagat    schedule 15.03.2017    source источник


Ответы (1)


Эта функция не была раскрыта. Но в формате файла XSSF вы можете получить это, используя классы CT. Я бы начал отсюда:

Sheet sh = wb.createSheet();
HeaderFooter header = sh.getHeader();
XSSFHeaderFooter xhd = (XSSFHeaderFooter) header;
CTHeaderFooter ctHd = xhd.getHeaderFooter();
ctHd.setAlignWithMargins(true);

Это работает только с файлами XLSX, я не знаю, как это сделать с файлами XLS. Обратите внимание, что я начал с общей рабочей книги, листа и заголовка. Но затем переместите его в заголовок XSSF, чтобы получить доступ к базовым классам CT. Вы могли бы написать все приложение с классами XSSF, и вам не пришлось бы XSSFHeaderFooter xhd = (XSSFHeaderFooter) header;.

person jmarkmurphy    schedule 15.03.2017
comment
Пожалуйста, предложите улучшение функции / откройте запрос на вытягивание с красивой оболочкой заголовка / нижнего колонтитула XSSF для этого! :) - person Gagravarr; 16.03.2017
comment
Я думаю, что что-то не так. Sheet.getHeader() не возвращает HeaderFooter. Вот ссылка на javadoc. poi.apache.org/apidocs/ org/apache/poi/xssf/usermodel/ - person Parth Bhagat; 17.03.2017
comment
Он возвращает Header, который является HeaderFooter. Мне нужно HeaderFooter для приведения к XSSFHeaderFooter для этого бита. Вы пробовали и не получилось? Что случилось. - person jmarkmurphy; 17.03.2017