Напечатайте нижний колонтитул как Page X of Y при использовании RtfWriter2 - PullRequest
2 голосов
/ 21 февраля 2011

Я создаю файл .doc с помощью RtfWriter (itext-rtf-2.1.4.jar) и com.lowagie (itext-2.1.5).

Ранее, когда я создавал PDF, я мограспечатать нижний колонтитул, отображающий «Страница X из Y», захватив события закрытия документов и события новой страницы, которые задаются при создании PDF в классе, с использованием следующего кода:

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("Sample.pdf"));

MyPageEvents events = new MyPageEvents();
writer.setPageEvent(events);

Где MyPageEvents - этофайл класса, который улавливает события завершения страницы, закрытия документа и т. д. .... для которого он устанавливает требуемый верхний и нижний колонтитулы.

Это очень хорошо работает с PDFWriter, но когда я начал создавать файл .doc с помощью RtfWriter2, онне поддерживает события ....

RtfWriter2 writer = RtfWriter2.getInstance(document, new FileOutputStream("Sample.doc"));


MyPageEvents events = new MyPageEvents();

, но не реорганизует метод writer.setPageEvents (), как это сделал PDFWriter ...

Возможен ли обходчтобы нижний колонтитул отображал страницу X из Y (Здесь X - текущая страница, а Y - общее количество страниц в документе)

Ответы [ 2 ]

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

Ах! Быстрый просмотр источника показал ответ:

RtfWriter2.setHeader() и setFooter().

Так что-то вроде ...

HeaderFooter header = new HeaderFooter();
Paragraph headerP = header.paragraph();
myBuildHeader(headerP);

myRtfWriter2.setHeader(header);

Easy.

PS: Поиск кода Google невероятно полезен. Я не могу рекомендовать это достаточно высоко.


Страница X из Y? Ах. Что ж.

Подробнее Поиск кода в RtfWriter2 и т. Д. Дает text.rtf.field.RtfPageNumber и text.rtf.field.RtfTotalPageNumber. Они оба простираются Chunk. text.rtf.RtfHeaderFooter может принимать Element[] и не ограничивается одним Paragraph. Учитывая, что классы номеров страниц расширяют Chunk, это не имеет значения, но полезно знать для справки в будущем.

Моя догадка по коду:

RtfHeaderFooter footer = new RtfHeaderFooter();
Paragraph p = footer.paragraph();
p.add(new RtfPageNumber());
p.add( " of ");
p.add(new RtfTotalPageNumber());

myRtfWriter2.setFooter(footer);

Остальное должно оставаться идентичным. Я думаю. На самом деле я никогда не использовал RtfWriter2 (или RtfWriter), так что не удивляйтесь, если это не сработает так, как есть.

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

Ну, следующий код поместит "СТРАНИЦА X из Y" в нижний колонтитул.

Просто изменился в нескольких местах в предложенном Марком коде и немного изменил порядок кода, и он прекрасно работал ....

Вместо использования writer.setFooter(footer) для установки нижнего колонтитула, использование document.setFooter(footer) поможет ...

Paragraph p=new Paragraph();
p.add( "Page  ");
p.add(new RtfPageNumber());
p.add( " of  ");
p.add(new RtfTotalPageNumber());
p.setAlignment(Element.ALIGN_CENTER);
RtfHeaderFooter footer1 = new RtfHeaderFooter(p);
document.setFooter(footer1);

И отдельная благодарность Марку ... он был великолепен в своем поиске кода .....

Добрый день ...

...