-1

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

        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();
4

1 回答 1

0
  1. 正如在现有页面底部添加内容中所述,该方法setHeader()已在很久以前从 iText 中删除。请不要使用它!
  2. 您可以使用页面事件轻松地将图像添加为标题。页面事件在iText in Action 的第 5 章中进行了解释。您可以在SO上找到对示例的参考

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

您需要创建一个PdfPageEvent实现,例如通过扩展PdfPageEventHelper覆盖该onEndPage()方法的类。这样做时,请考虑以下注意事项:

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

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

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

于 2012-11-21T09:17:10.463 回答