Chart.toImage DataLabel orientaion- and font settings are not applied in the image generated

Hi,

Please run the following sample and see the issue with data labels in the generated image - DataLabel orientaion, and font settings are not applied.

Thanks
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.ChartType;
import com.aspose.cells.Color;
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 DataLabelConflict {

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

series.getDataLabels().setRotation(90);
series.getDataLabels().setValueShown(true);
series.getDataLabels().setFont(font);
series.getDataLabels().setNumberFormat("###.00");
series.getDataLabels().setLabelPosition(LabelPositionType.OUTSIDE_END);
}

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,

Thanks for providing us the sample code.

I found your mentioned issues, we will figure it out soon.

We have logged it into our issue tracking system with an issue id: CELLSJAVA-14917.

We will inform you when it is sorted out.
Thank you.

Hi,

We have fixed the issue of the settings for DataLabels. Please try the attached version.

Thank you.

Hi,

DataLabel Orientation is fine. Font and color also fine. Bold & Italic seems to be not working. Overall look and feel of image is not comparable. Is,t possible to improve it littlebit?
Please find the image attached for details.

Muhammed

Hi,

Well, bold and italic attributes work fine in the output chart’s image. See my screenshots running your sample code:


Hi,

What could be the reason for it not working on my machine?
Any dependency with JAI versions, availability of fonts, etc…?

Another important drawback is the gap between datalabel and top of the bar is not perfect in the image. You can see that in both attachments - one I posted and in the one you have posted.

Muhammed

Hi,

Well, we are not sure why you got the font’s bold/italic issues in the generated image, it works fine here.
Could you give us your environment and system details, e.g OS, JDK version etc., We will also check it further and let you know about it soon.

"Another important drawback is the gap between datalabel and top of the
bar is not perfect in the image. You can see that in both attachments -
one I posted and in the one you have posted."

Yes, we noticed the difference, we will further look into it and get back to you soon.


Thank you.

Hi,

Please try the attached version.

We have fixed the issue of gap between data labels and top of the bar.

Thank you.

Hi,

The issue of gap between data labels and top of the bar is working fine. Bold italic not working on my env -

Java "1.4.2_15"
Windows XP

Thanks & Regards
Muhammed

Hi,

Could you try Aspose.Cells for Java version (compiled on jdk5.0) on JDK1.5 environment.

Thank you.

Hi,

I tried (1.4 compiled version) with JRE 1.5, and its working fine(I used aspose jar for 1.4 & 1.5 - both are working fine.).

So, only when I run with JDK1.4, it fails.

Thanks
Muhammed

Hi,

Could you test the java program for the font issue in your environment with JDK1.4. For your information, we have tested Aspose.Cells with several JDK1.4 versions and all work fine without any issue.

Thank you.


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


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