расположение диаграммы круговой диаграммы в iText PDF в Java - PullRequest
3 голосов
/ 05 сентября 2011

Я создаю круговую диаграмму с помощью jFreechart и добавляю диаграмму в pdf, созданную в iText.Проблема в том, что диаграмма всегда добавляется внизу страницы, а не после последней строки.

Пример кода для восстановления ошибки:

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

Здесь параметры выбираются избазы данных, поэтому не уверен, на счет опции.Я хочу показать график прямо к таблице.Как я могу это сделать?

1 Ответ

6 голосов
/ 05 сентября 2011

Вы добавляете диаграмму как шаблон, и по определению они добавляются с абсолютными координатами.

Если вы используете плавающие элементы, как я полагаю, вы можете использовать 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);

Пример кода выше показывает суть этого. Вы должны как можно чаще использовать Element объекты, такие как Image, если вы не хотите абсолютно обрабатывать высоты и положения.

...