answer you found for iText 5 ссылки MovieCountries1 пример. Этот пример был переписан для iText 7 как Listing_05_20_MovieCountries1. Его ключевой код:
protected PdfFont bold;
protected PdfFont italic;
protected PdfFont normal;
protected PdfFormXObject template;
public void manipulatePdf(String dest) throws IOException, SQLException {
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc, new PageSize(PageSize.A4), true);
doc.setMargins(54, 36, 36, 36);
bold = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD);
italic = PdfFontFactory.createFont(FontConstants.HELVETICA_OBLIQUE);
normal = PdfFontFactory.createFont(FontConstants.HELVETICA);
template = new PdfFormXObject(new Rectangle(550, 803, 30, 30));
PdfCanvas canvas = new PdfCanvas(template, pdfDoc);
HeaderHandler headerHandler = new HeaderHandler();
pdfDoc.addEventHandler(PdfDocumentEvent.START_PAGE, headerHandler);
... ADD CONTENT ...
canvas.beginText();
try {
canvas.setFontAndSize(PdfFontFactory.createFont(FontConstants.HELVETICA), 12);
} catch (IOException e) {
e.printStackTrace();
}
canvas.moveText(550, 803);
canvas.showText(Integer.toString(pdfDoc.getNumberOfPages()));
canvas.endText();
canvas.release();
doc.close();
}
public class HeaderHandler implements IEventHandler {
protected String country;
@Override
public void handleEvent(Event event) {
PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
PdfPage page = docEvent.getPage();
int pageNum = docEvent.getDocument().getPageNumber(page);
PdfCanvas canvas = new PdfCanvas(page);
canvas.beginText();
try {
canvas.setFontAndSize(PdfFontFactory.createFont(FontConstants.HELVETICA), 12);
} catch (IOException e) {
e.printStackTrace();
}
canvas.moveText(34, 803);
canvas.showText(country);
canvas.moveText(450, 0);
canvas.showText(String.format("Page %d of", pageNum));
canvas.endText();
canvas.stroke();
canvas.addXObject(template, 0, 0);
canvas.release();
}
public void setHeader(String country) {
this.country = country;
}
}
Здесь вы найдете перезаписи многих других образцов.
Как заметил @Bruno в комментарии, есть даже немного другой пример, который был действительно создан для IText 7 (в отличие от приведенного выше примера, который является порт из IText 5 примера).
Это пример, сопровождающий chapter 7 of iText 7: building blocks tutorial. Он использует showTextAligned()
, чтобы убедиться, что «Страница X of» хорошо соответствует «Y», независимо от того, сколько цифр X и Y имеют, ср. его конец из-страницы метод прослушивателя событий:
public void handleEvent(Event event) {
PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
PdfDocument pdf = docEvent.getDocument();
PdfPage page = docEvent.getPage();
int pageNumber = pdf.getPageNumber(page);
Rectangle pageSize = page.getPageSize();
PdfCanvas pdfCanvas = new PdfCanvas(
page.newContentStreamBefore(), page.getResources(), pdf);
Canvas canvas = new Canvas(pdfCanvas, pdf, pageSize);
Paragraph p = new Paragraph()
.add("Page ").add(String.valueOf(pageNumber)).add(" of");
canvas.showTextAligned(p, x, y, TextAlignment.RIGHT);
pdfCanvas.addXObject(placeholder, x + space, y - descent);
pdfCanvas.release();
}
(C07E03_PageXofY.java, событие класса обработчика PageXofY
)
Может кто-то пожалуйста, создать «iText7» тег я могу добавить к этому, как и я не иметь достаточную репутацию! :-(Тег «iText» не особенно полезен при поиске вопросов и ответов iText7, поскольку iText 5 и iText 7 являются совершенно разными животными! –
Согласно http://meta.stackexchange.com/questions/85358/what -элементы-рекомендации-для-использования-специфичные для версии теги и http://meta.stackoverflow.com/questions/299598/should-there-generally-be-only-one-tag-for-a-language -rather-than-multiple-esp, тег 'itext7' * может быть полезен. Я не против, но модераторы StackOverflow очень быстр, чтобы сквоить такой тег, не зная подробностей. –
Я только что создал тег, давайте посмотрим, как долго он будет жить. Честно говоря, я не оптимист. –