如何使用数据库中的内容创建页脚表

时间:2014-05-30 14:06:22

标签: java pdf-generation itext footer

尝试为pdf生成的发票创建固定版本,我尝试使用iText in Action一书中的不同技术。但我需要的东西似乎并不在书中。在我的例子中,每个单元格中的文本不是我发送的示例中的文字,但需要从数据库中读取。 在这些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。

1 个答案:

答案 0 :(得分: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",我重视您的反馈。请花些时间填写our survey