图表中的饼图的位置在iText pdf中的java

Har*_*Joy 3 pdf location jfreechart itext pie-chart

我正在使用jFreechart创建一个饼图,并在iText中创建的pdf中添加图表.问题是图表始终添加在页面底部而不是最后一行之后.

重新生成错误的示例代码是:

Document document = new Document();
PdfWriter writer;
File file = new File("c:/myPdf.pdf");
writer = PdfWriter.getInstance(document, new FileOutputStream(file));
document.open();

try {
        DefaultPieDataset pieDataset = new DefaultPieDataset();
        pieDataset.setValue("OPT 1", 10);
        pieDataset.setValue("OPT 2", 0);
        pieDataset.setValue("OPT 3", 17);
        pieDataset.setValue("OPT 4", 11);
        JFreeChart chart = ChartFactory.createPieChart3D("Option click count", 
                pieDataset, true, false, false);

        final PiePlot3D plot = (PiePlot3D) chart.getPlot();
        plot.setNoDataMessage("No data to display");
        chart.setTitle(new TextTitle("Option Click Count", new Font("Times New Roman", Font.PLAIN, 14)));

        PdfContentByte pdfContentByte = writer.getDirectContent();
        PdfTemplate pdfTemplateChartHolder = pdfContentByte.createTemplate(225,225);
        Graphics2D graphicsChart = pdfTemplateChartHolder.createGraphics(225,225,new DefaultFontMapper());
        Rectangle2D chartRegion =new Rectangle2D.Double(0,0,225,225);
        chart.draw(graphicsChart,chartRegion);
        graphicsChart.dispose();
        pdfContentByte.addTemplate(pdfTemplateChartHolder,0,0);
    } catch (Exception e) {
        e.printStackTrace();
    } 
document.close();
Run Code Online (Sandbox Code Playgroud)

这里的选项是从数据库中获取的,因此不确定选项的计数.我想在桌子上显示图表.我怎样才能做到这一点?

Jes*_*Jes 6

您将图表添加为模板,根据定义,它们将添加绝对坐标.

如果您正在使用浮动元素,我可以使用com.lowagie.itext.Image(版本2.1)和更新的版本com.itextpdf.text.Image.

您可以使用Image该类创建模板,并将其添加为Element:

这里(iText API).

PdfContentByte pdfContentByte = writer.getDirectContent();
PdfTemplate pdfTemplateChartHolder = pdfContentByte.createTemplate(225,225);
Graphics2D graphicsChart = pdfTemplateChartHolder.createGraphics(225,225,new DefaultFontMapper());
Rectangle2D chartRegion = new Rectangle2D.Double(0,0,225,225);
chart.draw(graphicsChart,chartRegion);
graphicsChart.dispose();

Image chartImage = Image.getInstance(pdfTemplateChartHolder);
document.add(chartImage);
Run Code Online (Sandbox Code Playgroud)

上面的代码示例显示了它的要点.您应尽可能经常使用Element对象,例如,Image如果您不想绝对处理高度和位置.