2011-09-05 3 views
3

jFreechart를 사용하여 파이 차트를 만들고 iText에서 생성 된 차트에 차트를 추가합니다. 문제는 차트가 항상 마지막 줄 이후가 아니라 페이지 하단에 추가된다는 것입니다.자바에서 iText의 파이 차트 위치

오류를 regenrating의 샘플 코드는 다음과 같습니다

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

가 여기에 옵션이 너무 데이터베이스에서 옵션의 수에 대한 확인을 불러올 수 없습니다. 테이블에 차트를 보여주고 싶습니다. 어떻게해야합니까?

답변

6

차트를 템플릿으로 추가하고 정의마다 절대 좌표로 추가됩니다.

유동 요소를 사용하는 경우 com.lowagie.itext.Image (버전 2.1)을 사용하고 최신 버전 com.itextpdf.text.Image을 사용할 수 있습니다.

당신은 템플릿을 만들 수 Image 클래스를 사용하고 Element로 추가 할 수 있습니다 :

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

위의 코드 예는 요점을 보여줍니다. 높이와 위치를 절대적으로 처리하지 않으려면 Image과 같이 가능한 한 자주 Element 개체를 사용해야합니다.

관련 문제