Пытаясь создать стационарный для созданных pdf счетов-фактур, я попытался использовать разные методы из книги iText в действии. Но то, что мне нужно, похоже, не в книге. В моем случае текст в каждой ячейке не является литералом, как в примере, который я отправляю, но должен быть прочитан из базы данных. Не рекомендуется помещать код для чтения из базы данных в этот метод onEndPage. Если мне нужно сделать это в методе вызывающего абонента, как данные будут переданы MyPageEventListener? Другими словами: как я могу собрать все это вместе?
public class MyPageEventListener extends PdfPageEventHelper {
. . .
@Override
public void onEndPage(PdfWriter writer, Document document) {
//code skeleton to write page header
PdfPTable tbl = new PdfPTable(3);
tbl.addCell("1st cell"); //companyname
tbl.addCell("2nd cell"); //address
tbl.addCell("3rd cell"); //city
tbl.addCell("4st cell"); //bankaccount
tbl.addCell("5nd cell"); //swiftcode
tbl.addCell("6rd cell"); //vat number
float x = document.leftMargin();
float hei = header.getTotalHeight(); //altezza dell'intestazione
//align bottom between page edge and page margin
float y = c_document.top() + hei;
//write the table
tbl.writeSelectedRows(0, -1, x, y, writer.getDirectContent());
}
}
Я еще не нашел ответа в другом месте, поэтому, пожалуйста, всякая помощь будет высоко оценена. Lourens.
Я написал книгу, поэтому позвольте мне ответить.
У вас должно быть что-то вроде этого:
public class MyData {
private String companyName;
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getCompanyName() {
return companyName;
}
}
public class MyPageEventListener extends PdfPageEventHelper {
private MyData myData;
public setMyData(MyData myData) {
this.myData = myData;
}
....
@Override
public void onEndPage(PdfWriter writer, Document document) {
//code skeleton to write page header
PdfPTable tbl = new PdfPTable(3);
tbl.addCell(myData.getCompanyName()); //companyname
tbl.addCell(myData.getAddress()); //address
tbl.addCell(myData.getCity()); //city
...
float x = document.leftMargin();
float hei = header.getTotalHeight(); //altezza dell'intestazione
//align bottom between page edge and page margin
float y = c_document.top() + hei;
//write the table
tbl.writeSelectedRows(0, -1, x, y, writer.getDirectContent());
}
}
Теперь, когда вы хотите изменить информацию нижнего колонтитула, вы делаете это из класса, который создает ваш PDF файл. Это показано в примере MovieCountries1 в книге, на которую вы ссылаетесь. В этом примере заголовок - это название страны, взятой из базы данных. Вместо метода setMyData()
я использовал метод setHeader()
для изменения содержимого заголовка.
Являясь оригинальным разработчиком iText и автором книги "iText in Action", я ценю ваши отзывы. Пожалуйста, найдите время, чтобы заполнить наш опрос.