Free Support Forum - aspose.com

chart.toImage generated image doesn't reflect series (bar) color

Hi,
Please find the sample below, with which you can reproduce the issue -
hart.toImage generated image doesn't reflect series (bar) color. You can see the proper bar colors in the legend of generated image.

Line chart seems to be working fine.


import java.io.*;

import java.lang.reflect.Array;

import com.aspose.cells.ImageFormat;

import com.aspose.cells.*;

import com.aspose.slides.*;

public class SeriesColorConflict {

public static void main(String args[]) {

try {

String[] cellsName = new String[] { "B1", "B2", "B3", "B4",

"C1", "C2", "C3", "C4",

"D1", "D2", "D3", "D4",

"E1", "E2", "E3", "E4",

"F1", "F2", "F3", "F4"

};

//Array of cell data

int[] cellsValue = new int[] { 67, 86, 68, 91,

44, -64, -89, 48,

46, -97, 78, 60,

43, -29, 69, 26,

24, 40, -38, 25 };

Workbook wb = new Workbook();

Worksheet dataSheet = wb.getWorksheets().getSheet(0);

String dataSheetName = "DataSheet";

dataSheet.setName(dataSheetName);

dataSheet.getCells().getCell("A1").setValue("IN");

dataSheet.getCells().getCell("A2").setValue("US");

dataSheet.getCells().getCell("A3").setValue("UK");

dataSheet.getCells().getCell("A4").setValue("JP");

dataSheet.getCells().getCell("A5").setValue("CH");

//Populate DataSheet with data

int size = Array.getLength(cellsName);

for (int i = 0; i < size; i++) {

String cellName = cellsName[i];

int cellValue = cellsValue[i];

dataSheet.getCells().getCell(cellName).setValue(cellValue);

}

//Add a chart sheet

Worksheet chartSheet = wb.getWorksheets().addSheet();

chartSheet.setName("ChartSheet");

int chartSheetIdx = chartSheet.getIndex();

//Add a chart in ChartSheet with data series from DataSheet

int chartWidth = 600;

int chartHeight = 400;

int chartHeightInRows = 0;

int chartWidthInCols = 0;

int cellWidth = dataSheet.getCells().getColumnWidthPixel(0);

int cellHeight = dataSheet.getCells().getRowHeightPixel(0);

chartWidthInCols = (int)(chartWidth / cellWidth);

chartHeightInRows = (int)(chartHeight / cellHeight);

chartWidth = chartWidthInCols * cellWidth;

chartHeight = chartHeightInRows * cellHeight;

System.out.println("OLE SIZE = Cols: " + chartWidthInCols + ", Rows: " + chartHeightInRows);

System.out.println("CHART SIZE = chartWidth: " + chartWidth + ", chartHeight: " + chartHeight);

Chart chart = chartSheet.getCharts().addChart(ChartType.COLUMN_CLUSTERED, 0, 0, 0, 0, chartWidth, chartHeight);

chart.getNSeries().add(dataSheetName + "!B1:F4", false);

for (int i = 0; i < chart.getNSeries().size(); i++) {

ASeries series = chart.getNSeries().get(i);

PatternFill pf = new PatternFill();

pf.setBackgroundColor(wb.getPalette().getColor(i));

pf.setForegroundColor(wb.getPalette().getColor(i));

series.getArea().setFill(pf);

}

String categoryAreaRef = dataSheet.getName() + "!A1:A5";

chart.getNSeries().setCategoryData(categoryAreaRef);

chart.getCategoryAxis().setDisplayUnitLabelShown(false);

chart.getCategoryAxis().setTickLabelPosition(TickLabelPositionType.NONE);

chart.getTitle().setText("Aspose.Cells");

//Get Chart as image.

ImageOptions imgOpts = new ImageOptions();

imgOpts.setImageFormat(ImageFormat.PNG);

imgOpts.setFashion(FileFormatType.EXCEL2003);

chart.toImage(new FileOutputStream("D:\\Temp\\chart.png"), imgOpts);

wb.getWorksheets().setActiveSheet(chartSheetIdx);

wb.setOleSize(0, chartHeightInRows - 1, 0, chartWidthInCols - 1);

//Save the workbook to stream

ByteArrayOutputStream bout = new ByteArrayOutputStream();

wb.save(bout);

wb.save(new FileOutputStream("D:\\Temp\\output.xls"));

Presentation pres = new Presentation();

Slide sld = pres.getSlideByPosition(1);

int slideWidth = (int) pres.getSlideSize().getX();

int slideHeight = (int) pres.getSlideSize().getY();

int x = (slideWidth - chartWidth * 8) / 2;

int y = (slideHeight - chartHeight * 8) / 2;

OleObjectFrame oof = sld.getShapes().addOleObjectFrame(800, 500, chartWidth * 8, chartHeight * 8, "Excel.Sheet.8", bout.toByteArray());

com.aspose.slides.Picture pic = new com.aspose.slides.Picture(pres, new FileInputStream("D:\\Temp\\chart.png"));

int picId = pres.getPictures().add(pic);

oof.setPictureId(picId);

//Write the presentation on disk

pres.write(new FileOutputStream("D:\\Temp\\output.ppt"));

System.out.println("successfully completed!!!");

}

catch (Exception e) {

e.printStackTrace();

}

}

}


-Muhammed

Hi,

Using your code, we found the issue as you have mentioned, the bar’s changed fill format colors are not reflected correctly. We will figure it out soon.

Your issue has been logged into our issue tracking system with an issue id: CELLSJAVA-14405.

Thank you.

Hi,

Please try the attached version, we have fixed the issue of series colors.

Thank you.

Working fine.
Thanks

Muhammed

The issues you have found earlier (filed as 14405) have been fixed in this update.


This message was posted using Notification2Forum from Downloads module by aspose.notifier.