如何使用itext在数据库生成的pdf报告中添加标题图像

时间:2012-11-21 09:06:07

标签: pdf servlets header itext

Hii伙计!!              下面是我将数据库导出到excel文件的代码。现在根据我的要求,我想在页面顶部添加公司的标题图片.plz人帮助我并指导我完成任务。谢谢提前。谢谢是我的代码...

        Document document = new Document(PageSize.A2);

        PdfWriter.getInstance(document, new FileOutputStream("d:/".concat(datum1).concat(" ").concat("To").concat(" ").concat(datum2).concat(".pdf")));
        document.open();

        Image logo = Image.getInstance("d:/header.png");
        logo.setAlignment(Image.MIDDLE);
        logo.scaleAbsoluteHeight(20);
        logo.scaleAbsoluteWidth(20);
        logo.scalePercent(100);
        Chunk chunk = new Chunk(logo, 0, -45);
        HeaderFooter header = new HeaderFooter(new Phrase(chunk), false);
        header.setAlignment(Element.ALIGN_CENTER);
        header.setBorder(Rectangle.NO_BORDER);
        document.setHeader(header);

        PdfPTable table = new PdfPTable(9);
        table.setWidthPercentage(110);
        table.addCell("calldate");
        table.addCell("src");
        table.addCell("dst");
        table.addCell("dstchannel");
        table.addCell("lastapp");
        table.addCell("duration");
        table.addCell("disposition");
        table.addCell("amaflags");
        table.addCell("cdrcost");


        String strQuery = "";
        ResultSet rs = null;

        conexion conexiondb = new conexion();
        conexiondb.Conectar();

        strQuery = "SELECT * FROM cdrcost where date(calldate) between '" + datum1 + "' and '" + datum2 + "'";

        // strQuery = "SELECT * FROM cdrcost where date(calldate) between '2011-09-01' and '2012-01-01'";

        rs = conexiondb.Consulta(strQuery);
        while (rs.next()) {
            table.addCell(rs.getString("calldate"));
            table.addCell(rs.getString("src"));
            table.addCell(rs.getString("dst"));
            table.addCell(rs.getString("dstchannel"));
            table.addCell(rs.getString("lastapp"));
            table.addCell(rs.getString("duration"));
            table.addCell(rs.getString("disposition"));
            table.addCell(rs.getString("amaflags"));
            table.addCell(rs.getString("cdrcost"));
        }

        document.add(table);
        document.close();

1 个答案:

答案 0 :(得分:0)

  1. 正如add content to the bottom of an existing page中所述,很久以前,方法setHeader()已从iText中移除。请不要使用它!
  2. 您可以使用页面事件轻松地将图像添加为标题。页面事件在Chapter 5 of iText in Action中说明。您可以在SO
  3. 上找到对示例的引用

    由于您似乎不理解之前在SO上给出的答案,让我再说一遍:

    您需要创建PdfPageEvent实现,例如通过扩展覆盖PdfPageEventHelper方法的onEndPage()类。执行此操作时,请考虑以下警告:

    • 请勿使用onStartPage()添加内容
    • 不要向传递给页面事件的Document对象添加任何内容,
    • 除非您指定了不同的页面大小,否则左下角的坐标为x = 0; y = 0。添加页脚时需要考虑到这一点。页脚的y值低于标题的y值。

    在您的代码中,您需要在打开文档之前使用setPageEvent()对象上的PdfWriter方法。每次页面完成时,您调用的onEndPage()方法都会被调用,因此您需要使用PdfContentByte.addImage()添加图像。如果您希望图像位于页面顶部,则需要询问Document的尺寸,并相应地设置Image对象的绝对位置。

    如果您不理解这个详细的解释,请阅读我的book或聘请iText开发人员为您完成此任务。