如何在onEndPage()itext方法中传递自定义对象?

时间:2017-03-17 09:34:26

标签: java pdf itext

我在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调用,所以我甚至都不能更改方法的签名我猜...任何建议? 谢谢大家的答案。

1 个答案:

答案 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变量。