2011-09-05 114 views
3

我使用jFreechart創建餅圖並在iText中創建的pdf中添加圖表。問題是圖表總是添加在頁面的底部,而不是在最後一行之後。iText中的餅圖的圖表位置pdf中的pdf

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

上述代碼示例顯示了它的要點。如果您不想完全處理高度和位置,則應儘可能經常使用Element對象,例如Image