Как создать таблицу в нижнем колонтитуле с контентом из базы данных

1

Пытаясь создать стационарный для созданных 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.

Теги:
itext
pdf-generation
footer

1 ответ

1

Я написал книгу, поэтому позвольте мне ответить.

У вас должно быть что-то вроде этого:

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", я ценю ваши отзывы. Пожалуйста, найдите время, чтобы заполнить наш опрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню