Free Support Forum - aspose.com

Chart.toImage - Wrong image generated when we set ValueAxis.setMinValue and/or ValueAxis.setMaxValue

Hi,

Please run the following sample and see that the image generated ouf of chart with Min & Max values set using ValueAxis.setMinValue and/or ValueAxis.setMaxValue is not correct.

Thanks & Regards
Muhammed

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.lang.reflect.Array;

import com.aspose.cells.ASeries;
import com.aspose.cells.CellsHelper;
import com.aspose.cells.Chart;
import com.aspose.cells.ChartPoint;
import com.aspose.cells.ChartPoints;
import com.aspose.cells.ChartType;
import com.aspose.cells.Color;
import com.aspose.cells.DataLabels;
import com.aspose.cells.DisplayUnitType;
import com.aspose.cells.FileFormatType;
import com.aspose.cells.Font;
import com.aspose.cells.GradientColorType;
import com.aspose.cells.GradientDirectionType;
import com.aspose.cells.GradientFill;
import com.aspose.cells.GradientFillType;
import com.aspose.cells.GradientStyleType;
import com.aspose.cells.ImageFormat;
import com.aspose.cells.ImageOptions;
import com.aspose.cells.LabelPositionType;
import com.aspose.cells.PatternFill;
import com.aspose.cells.TickLabelPositionType;
import com.aspose.cells.TrendlineType;
import com.aspose.cells.Workbook;
import com.aspose.cells.Worksheet;
import com.aspose.slides.OleObjectFrame;
import com.aspose.slides.Presentation;
import com.aspose.slides.Slide;

public class AxisMinMaxValue {

public static void main(String args[]) {

System.out.println(CellsHelper.getReleaseVersion());

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("Rinse Conditioners");
dataSheet.getCells().getCell("A2").setValue("Main Wash");
dataSheet.getCells().getCell("A3").setValue("Deodrants");
dataSheet.getCells().getCell("A4").setValue("Tumble Drying Enhancer");
dataSheet.getCells().getCell("A5").setValue("Iron Enhancer");

//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 = 500;

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;

Chart chart = chartSheet.getCharts().addChart(ChartType.COLUMN_CLUSTERED, 0, 0, 0, 0, chartWidth, chartHeight);
chart.getNSeries().add(dataSheetName + "!B1:F4", false);

Font font = new Font();
font.setBold(true);
font.setItalic(true);
font.setSize(10);
font.setColor(Color.BLUE);

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

chart.getValueAxis().setMinValue(40);
chart.getValueAxis().setMaxValue(80);

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

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

chart.getCategoryAxis().getTitle().setText("Category Axis");
chart.getValueAxis().getTitle().setText("Value Axis");


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

}

Hi,

We found the issue after an initial test, we will figure it out soon.

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

Thank you.

Hi,

Please try the attached version.

We have fixed the issue of Min & Max values.

Thank you.

Hi,

Its working fine with Aspose.Cells 2.1.2.10

Thanks
Muhammed

Hi,

Can you please try the same example with the following changes.

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

chart.getValueAxis().setMinValue(-40);
chart.getValueAxis().setMaxValue(2000);

In the generated image, X axis tick labels seems to be wrongly cut.
Please check the issue.

Thanks
Muhammed

Hi,

We found the issue changing your suggested lines of code, we have re-opened the issue logged as: CELLSJAVA-14925

We will let you know when it is sorted out.

Thank you.

Hi,

Please try the attached version. We have made some improvements for the custom Max/Min value of Axis.
There are some other issues left with the generated image and we are working on
them.

Thank you.

Hi,

Now the issue "X axis tick labels are wrongly cut" working fine. As you mentioned, there are a lot of gap in between image and actual chart, like -
Y axis min/max values are different,
X axis tick label orientation are different,
Y axis scale is different, etc

Thanks
Muhammed

Hi,

Yes, we already noticed these issues (you mentioned here). As we said earlier, we are still working on these issues. We will inform you when the issues are sorted out.

Thanks for your understanding!

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


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

Hi,
The following issues are still reproducible

Y axis min/max values are different,
X axis tick label orientation are different,
Y axis scale is different, etc

Thanks
Muhammed

Hi,


We will figure out your mentioned issues soon.

Thank you.