如何使用iTextPdf在同一文档中绘制两个JFreeCharts

如何使用iTextPdf在同一文档中绘制两个JFreeCharts,itext,Itext,我想使用iTextPdf在同一文档中打印两个Jfree图表,当我尝试使用此代码时,下面的JFreeChart会覆盖上一个。结果,我在pdf的两页上都得到了第二张图表 public void ExportChart(OutputStream out, int width, int height) throws IOException, DocumentException { Rectangle rect = new com.itextpdf.text.Rectangle((floa

我想使用iTextPdf在同一文档中打印两个Jfree图表,当我尝试使用此代码时,下面的JFreeChart会覆盖上一个。结果,我在pdf的两页上都得到了第二张图表

    public void ExportChart(OutputStream out, int width, int height) throws IOException, DocumentException {
    Rectangle rect = new com.itextpdf.text.Rectangle((float) width, (float) height+130);
    Document document = new com.itextpdf.text.Document(rect);
    PdfWriter writer = null;

    writer=PdfWriter.getInstance(document, out);
    document.open();
    document.add(addHeaderInfo(width));

    DefaultFontMapper mapper = new DefaultFontMapper();
    FontFactory.registerDirectories();
    PdfContentByte cb = writer.getDirectContent();
    PdfTemplate tp = cb.createTemplate(width, height);
    Graphics2D g2d = tp.createGraphics(width, height, mapper);
    tp.setWidth(width);
    tp.setHeight(height);
    //barStat is a JFreeChart Objecct
    barStat.draw(g2d, new java.awt.Rectangle(width, height));

    cb.addTemplate(tp, 0, 0);
    document.newPage();


    SingleHistogramDialog singleHD=new SingleHistogramDialog();
    JFreeChart barStat2=singleHD.Histogram();

    document.add(addHeaderInfo(width));


    FontFactory.registerDirectories();
    tp.setWidth(width);
    tp.setHeight(height);
    barStat2.draw(g2d, new java.awt.Rectangle(width, height));
    g2d.dispose();
    cb.addTemplate(tp, 0, 0);

    document.close();
}

我从字面上复制了您的代码,并做了一些更改:

public void ExportChart(OutputStream out, int width, int height) throws IOException, DocumentException {
    Rectangle rect = new com.itextpdf.text.Rectangle((float) width, (float) height+130);
    Document document = new com.itextpdf.text.Document(rect);
    PdfWriter writer = null;

    writer=PdfWriter.getInstance(document, out);
    document.open();
    document.add(addHeaderInfo(width));

    DefaultFontMapper mapper = new DefaultFontMapper();
    FontFactory.registerDirectories();
    PdfContentByte cb = writer.getDirectContent();
    PdfTemplate tp = cb.createTemplate(width, height);
    Graphics2D g2d = tp.createGraphics(width, height, mapper);
    //barStat is a JFreeChart Objecct
    barStat.draw(g2d, new java.awt.Rectangle(width, height));

    cb.addTemplate(tp, 0, 0);
    document.newPage();


    SingleHistogramDialog singleHD=new SingleHistogramDialog();
    JFreeChart barStat2=singleHD.Histogram();

    document.add(addHeaderInfo(width));

    tp = cb.createTemplate(width, height);
    g2d = tp.createGraphics(width, height, mapper);
    barStat2.draw(g2d, new java.awt.Rectangle(width, height));
    g2d.dispose();
    cb.addTemplate(tp, 0, 0);

    document.close();
}

我从字面上复制了您的代码,并做了一些更改:

public void ExportChart(OutputStream out, int width, int height) throws IOException, DocumentException {
    Rectangle rect = new com.itextpdf.text.Rectangle((float) width, (float) height+130);
    Document document = new com.itextpdf.text.Document(rect);
    PdfWriter writer = null;

    writer=PdfWriter.getInstance(document, out);
    document.open();
    document.add(addHeaderInfo(width));

    DefaultFontMapper mapper = new DefaultFontMapper();
    FontFactory.registerDirectories();
    PdfContentByte cb = writer.getDirectContent();
    PdfTemplate tp = cb.createTemplate(width, height);
    Graphics2D g2d = tp.createGraphics(width, height, mapper);
    //barStat is a JFreeChart Objecct
    barStat.draw(g2d, new java.awt.Rectangle(width, height));

    cb.addTemplate(tp, 0, 0);
    document.newPage();


    SingleHistogramDialog singleHD=new SingleHistogramDialog();
    JFreeChart barStat2=singleHD.Histogram();

    document.add(addHeaderInfo(width));

    tp = cb.createTemplate(width, height);
    g2d = tp.createGraphics(width, height, mapper);
    barStat2.draw(g2d, new java.awt.Rectangle(width, height));
    g2d.dispose();
    cb.addTemplate(tp, 0, 0);

    document.close();
}

我用这种方式修改了上面的代码,解决了我的问题

    public void ExportChart(OutputStream out, int width, int height) throws 
    IOException, DocumentException {
    Rectangle rect = new com.itextpdf.text.Rectangle((float) width, (float) 
    height+130);
    Document document = new com.itextpdf.text.Document(rect);
    PdfWriter writer = null;

    writer=PdfWriter.getInstance(document, out);
    document.open();
    document.add(addHeaderInfo(width));

    DefaultFontMapper mapper = new DefaultFontMapper();
    FontFactory.registerDirectories();
    PdfContentByte cb = writer.getDirectContent();
    PdfTemplate tp = cb.createTemplate(width, height);
    Graphics2D g2d = tp.createGraphics(width, height, mapper);
    tp.setWidth(width);
    tp.setHeight(height);
    barStat.draw(g2d, new java.awt.Rectangle(width, height));



    Histogram singleHD=new Histogram();
    JFreeChart barStat2=singleHD.Histogram();


    PdfTemplate tp2 = cb.createTemplate(width, height);
    Graphics2D g2d2 = tp2.createGraphics(width, height, mapper);
    tp2.setWidth(width);
    tp2.setHeight(height);
    barStat2.draw(g2d2, new java.awt.Rectangle(width, height));

    g2d.dispose();

    cb.addTemplate(tp, 0, 0);
    document.newPage();
    document.add(addHeaderInfo(width));

    g2d2.dispose();

    cb.addTemplate(tp2, 0, 0);

    document.close();
}

我用这种方式修改了上面的代码,解决了我的问题

    public void ExportChart(OutputStream out, int width, int height) throws 
    IOException, DocumentException {
    Rectangle rect = new com.itextpdf.text.Rectangle((float) width, (float) 
    height+130);
    Document document = new com.itextpdf.text.Document(rect);
    PdfWriter writer = null;

    writer=PdfWriter.getInstance(document, out);
    document.open();
    document.add(addHeaderInfo(width));

    DefaultFontMapper mapper = new DefaultFontMapper();
    FontFactory.registerDirectories();
    PdfContentByte cb = writer.getDirectContent();
    PdfTemplate tp = cb.createTemplate(width, height);
    Graphics2D g2d = tp.createGraphics(width, height, mapper);
    tp.setWidth(width);
    tp.setHeight(height);
    barStat.draw(g2d, new java.awt.Rectangle(width, height));



    Histogram singleHD=new Histogram();
    JFreeChart barStat2=singleHD.Histogram();


    PdfTemplate tp2 = cb.createTemplate(width, height);
    Graphics2D g2d2 = tp2.createGraphics(width, height, mapper);
    tp2.setWidth(width);
    tp2.setHeight(height);
    barStat2.draw(g2d2, new java.awt.Rectangle(width, height));

    g2d.dispose();

    cb.addTemplate(tp, 0, 0);
    document.newPage();
    document.add(addHeaderInfo(width));

    g2d2.dispose();

    cb.addTemplate(tp2, 0, 0);

    document.close();
}