尝试为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。
答案 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。