我在onEndPage()方法(itext)上遇到了一些问题,基本上我已经在页脚上写了一些文本,用这种方式使用basc方法:
public class EventDichiarazionePdf extends PdfPageEventHelper{
private int numPage=0;
private static Font h6NormFont = new Font(Font.FontFamily.HELVETICA, 6,Font.NORMAL);
public void onStartPage(PdfWriter writer, Document document) {
numPage++;
}
public void onEndPage(PdfWriter writer, Document document) {
try {
Rectangle page = document.getPageSize();
PdfPTable footer = new PdfPTable(2);
PdfPCell cellFooter = new PdfPCell( new Phrase("Something – 03/12/2016 Customer n." + "here i need my variable",h6NormFont));
cellFooter.setHorizontalAlignment(Element.ALIGN_LEFT);
cellFooter.setBorder(0);
footer.addCell(cellFooter);
cellFooter = new PdfPCell( new Phrase( String.format("pag. %d",numPage),h6NormFont));
cellFooter.setHorizontalAlignment( Element.ALIGN_RIGHT );
cellFooter.setBorder(0);
footer.addCell(cellFooter);
footer.setTotalWidth(page.getWidth() - document.leftMargin() - document.rightMargin());
footer.writeSelectedRows( 0,-1,document.leftMargin(),document.bottomMargin(),writer.getDirectContent());
} catch ( Exception e ) {
throw new ExceptionConverter( e );
}
}
}
}
Basicaly我想再将一个对象加上write和document传递给onEndPage,但是这个方法永远不会在创建Pdf时被调用,读取文档,这种方法被一个Event调用,所以我甚至都不能更改方法的签名我猜...任何建议? 谢谢大家的答案。
答案 0 :(得分:0)
正如您自己发现的那样,您不能更改方法签名,因为您不是该方法的调用者。但是当您创建并注册事件对象时,您可以扩展其类以具有可用于您的任务的附加属性,例如:
public class EventDichiarazionePdf extends PdfPageEventHelper{
// vvv--- Change
public String extraValue = "";
// ^^^--- Change
private int numPage=0;
private static Font h6NormFont = new Font(Font.FontFamily.HELVETICA, 6,Font.NORMAL);
public void onStartPage(PdfWriter writer, Document document) {
numPage++;
}
public void onEndPage(PdfWriter writer, Document document) {
try {
Rectangle page = document.getPageSize();
PdfPTable footer = new PdfPTable(2);
// vvv--- Change
PdfPCell cellFooter = new PdfPCell( new Phrase("Something – 03/12/2016 Customer n." + extraValue ,h6NormFont));
// ^^^--- Change
cellFooter.setHorizontalAlignment(Element.ALIGN_LEFT);
cellFooter.setBorder(0);
footer.addCell(cellFooter);
[...]
} catch ( Exception e ) {
throw new ExceptionConverter( e );
}
}
}
}
因此,只要您知道要用于下一个页脚的值,就可以将其分配给extraValue
变量。