Определите необходимую ориентацию печати с помощью Apache POI - PullRequest
9 голосов
/ 20 октября 2010

Я использую Apache POI для создания электронных таблиц xls. Есть ли способ определить, подходят ли данные в портретном режиме или мне нужно перевести лист в альбомный режим? Я знаю, как установить режимы, но не знаю, как определить, соответствуют ли данные текущей ориентации печати. ​​

Ответы [ 2 ]

5 голосов
/ 22 августа 2012
   HSSFPrintSetup printSetup = sheet.getPrintSetup();
    sheet.getPrintSetup().setFitWidth((short) 1);
    sheet.getPrintSetup().setFitHeight((short) 0);
    sheet.setAutobreaks(true);
    printSetup .setLandscape(true);

   HSSFFooter footer = wygSheet.getFooter();
    footer.setCenter("Page " + HSSFFooter.page() + " of "+ HSSFFooter.numPages());
4 голосов
/ 21 октября 2010

Я пытался, но не могу найти способ заставить это работать.

Когда вы создаете рабочую книгу, для poi по умолчанию установлены Высота и Ширина Подгонки, равные 1.

Fit Height - это количество страниц высотой уместить лист в

и

Fit Width - это количество страниц в ширину вписать лист в

Если вы не установите более высокие значения высоты и ширины печати листа, например, так:

sheet.getPrintSetup().setFitHeight((short)10);

System.out.println (sheet.getPrintSetup().getFitWidth());
System.out.println (sheet.getPrintSetup().getFitHeight());

всегда возвращает 1 и 1

Проблема в том, что Excel всегда сжимает данные (в увеличенном размере) до 10%, чтобы соответствовать размеру страницы 1 x 1. [В MS_Excel это выглядит как Print Preview > Page Setup > Scaling > Down to X% of actual size]

После увеличения на 10% данные переполняются на странице 2 и т. Д.

Я пробовал лист с большим количеством данных и даже отправил большую область печати

workBook.setPrintArea(
                    0, //sheet index
                    0, //start column
                    50, //end column
                    0, //start row
                    520  //end row
            );

для печати различных размеров.

sheet.getPrintSetup().setPaperSize((short)11); // A5 

Таким образом, область печати / ориентация по умолчанию не изменяются, если вы не переопределите их, поэтому я не думаю, что данные могут быть обнаружены как превышающие область печати - это то, что вы пытаетесь получить.

Это может быть один из списков рассылки POI.

Обновлено , чтобы включить ссылку на это обсуждение в списки рассылки POI, как уже было задано OP.

http://mail-archives.apache.org/mod_mbox/poi-user/201010.mbox/%3c4CBDD258.80407@openforce.com%3e

...