Apache POI Charts - Форматирование заголовков - PullRequest
0 голосов
/ 18 мая 2018

Я создал линейный график, и когда я добавляю заголовок в свой график, он перекрывает мои данные.Как мне добавить заголовок над моей диаграммой?Также, как я могу настроить шрифт / стиль текста заголовка?Я хочу сделать текст немного меньше.

    Drawing drawing = sheet.createDrawingPatriarch();
    ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15);

    Chart chart = drawing.createChart(anchor);
    chart.setTitleText("This is my title");

    // Use a category axis for the bottom axis.
    ChartAxis bottomAxis = chart.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM);
    ValueAxis leftAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.LEFT);

    ChartDataSource<Integer> test = DataSources.fromArray([2011,2012,2013,2014,2015,2016,2017] as Integer[]);
    ChartDataSource<Integer> test2 = DataSources.fromArray([4805, 7351, 5333, 7183, 6230, 4050, 6963] as Integer[]);

    LineChartData data = chart.getChartDataFactory().createLineChartData();
    data.addSeries(test, test2);
    chart.plot(data, bottomAxis, leftAxis);

enter image description here

Итак, из этого примера я ищу дополнительные отступы / отступ выше 8000где мой титул будет идти.

1 Ответ

0 голосов
/ 20 мая 2018

То есть вы не хотите, чтобы заголовок перекрывал область графика?

Проблема в том, что apache poi был протестирован с использованием Excel 2007.Но после этой версии несколько настроек по умолчанию были изменены в более поздних версиях.

Например, для настройки оверлеев по умолчанию было установлено значение false (не накладывать) в Excel 2007, если это не было задано явно.На мой взгляд, это был хороший выбор.В более поздних версиях по умолчанию установлено значение true (делать оверлей), если оно не установлено явно.Это бред на мой взгляд.Но кого волнует мое мнение.

Так что, если мы не хотим, чтобы заголовок перекрывал область графика, мы должны установить это явно.

Стилизация шрифта заголовка возможна только с использованием низкоуровневых базовых объектов.,Для этого нам нужно добавить свойства запуска в первый абзац заголовка и первый текстовый запуск.Затем мы можем установить жирный шрифт, курсив и размер шрифта (единица 1/100 pt).А затем мы добавляем тип face для латинских и сложных символов скрипта.

Пример кода с использованием Java.(Код в вопросе, кажется, Groovy, но он не помечен как таковой, и нет ответа на мой вопрос об этом несоответствии.)

import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.charts.*;
import org.apache.poi.ss.util.CellRangeAddress;

import org.apache.poi.xssf.usermodel.*;

public class LineChartProblem {

 public static void main(String[] args) throws IOException {
  try (XSSFWorkbook wb = new XSSFWorkbook()) {

   Sheet sheet = wb.createSheet("linechart");
   Drawing drawing = sheet.createDrawingPatriarch();
   ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15);

   Chart chart = drawing.createChart(anchor);
   ((XSSFChart)chart).setTitleText("This is my title");

   //set "the title overlays the plot area" to false explicitly
   ((XSSFChart)chart).getCTChart().getTitle().addNewOverlay().setVal(false);

   //set font style for title - low level
   //add run properties to title's first paragraph and first text run. Set bold.
   ((XSSFChart)chart).getCTChart().getTitle().getTx().getRich().getPArray(0).getRArray(0).addNewRPr().setB(true);
   //set italic
   ((XSSFChart)chart).getCTChart().getTitle().getTx().getRich().getPArray(0).getRArray(0).getRPr().setI(true);
   //set font size 20pt
   ((XSSFChart)chart).getCTChart().getTitle().getTx().getRich().getPArray(0).getRArray(0).getRPr().setSz(2000);
   //add type face for latin and complex script characters
   ((XSSFChart)chart).getCTChart().getTitle().getTx().getRich().getPArray(0).getRArray(0).getRPr().addNewLatin().setTypeface("Times New Roman");
   ((XSSFChart)chart).getCTChart().getTitle().getTx().getRich().getPArray(0).getRArray(0).getRPr().addNewCs().setTypeface("Times New Roman");

   // Use a category axis for the bottom axis.
   ChartAxis bottomAxis = chart.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM);
   ValueAxis leftAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.LEFT);

   ChartDataSource<Integer> test = DataSources.fromArray(new Integer[]{2011,2012,2013,2014,2015,2016,2017});
   ChartDataSource<Integer> test2 = DataSources.fromArray(new Integer[]{4805, 7351, 5333, 7183, 6230, 4050, 6963});

   LineChartData data = chart.getChartDataFactory().createLineChartData();
   data.addSeries(test, test2);
   chart.plot(data, bottomAxis, leftAxis);

   // Write the output to a file
   try (FileOutputStream fileOut = new FileOutputStream("ooxml-line-chart.xlsx")) {
    wb.write(fileOut);
   }
  }
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...