Display Multiple Columns in Rendered Gantt Chart Image
Overview
In Microsoft Project, project data can be represented both in textual form and graphically as charts. The most common chart types include Gantt Chart, Task Usage, and Resource Usage. Aspose.Tasks for .NET supports rendering project data as graphical charts.
У цій статті описані два підходи для налаштування стовпців проекту, відображених у діаграмі Ганта, і демонструє, як передати діаграму на зображення.
Gantt Chart
A Gantt chart is a timeline-based graphical representation of project tasks, segmented by days, weeks, or months. A project typically consists of tasks assigned to resources. An individual task may be divided into subtasks. Each task has a start and end date that defines its duration. A Gantt chart in Microsoft Project provides a visual overview of this information.
The following screenshot shows a typical Gantt chart in Microsoft Project:
Зображення діаграми Ганта в Aspose.Tasks для .NET
В Aspose.Tasks для .NET клас Project
є основним класом для роботи з файлами проекту. Він надає кілька перевантажень методу Save
для експорту даних проекту в різні формати.
Наприклад, перевантаження Save(string, SaveOptions)
:
- Перший параметр вказує ім’я вихідного файлу.
- Другий параметр приймає екземпляр класу, похідного від
SaveOptions
, наприкладPdfSaveOptions
для формату PDF.
Тип SaveOptions
Поведінку рендерингу можна налаштувати за допомогою властивостей класу SaveOptions
або одного з його спадкоємців. Наприклад:
- Використовуйте
SaveOptions.CustomPageSize
для визначення розміру вихідної сторінки. - Використовуйте
SaveOptions.LegendOnEachPage
для керування тим, чи відображається легенда на кожній сторінці.
1PdfSaveOptions saveOptions = new PdfSaveOptions()
2{
3CustomPageSize = new SizeF(800, 600),
4LegendOnEachPage = false
5};
Існує щонайменше два підходи до налаштування зовнішнього вигляду відображеної діаграми Ганта.
Налаштування стовпців діаграми Ганта за допомогою ProjectView
Цей підхід вважається застарілим і навряд чи буде розширено в майбутніх випусках. Клас ProjectView
надає обмежену функціональність і дозволяє вказати набір стовпців, які будуть включені до вихідного зображення.
Щоб використовувати його, створіть список екземплярів GanttChartColumn
і передайте їх конструктору ProjectView
. Потім призначте це представлення властивості SaveOptions.View
.
1// Create the view columns
2var columns = new List<GanttChartColumn>();
3columns.Add(new GanttChartColumn("Name", 100, new TaskToColumnTextConverter(TaskName)));
4columns.Add(new GanttChartColumn("Notes", 100, new TaskToColumnTextConverter(TaskNotes)));
5columns.Add(new GanttChartColumn("Resources", 200, new TaskToColumnTextConverter(TaskResources)));
6
7// Create the view
8ProjectView projectView = new ProjectView(columns);
9
10// Create SaveOptions
11PdfSaveOptions saveOptions = new PdfSaveOptions()
12{
13 CustomPageSize = new SizeF(800, 600),
14 View = projectView
15};
16
17// Save the project to PDF
18project.Save("output.pdf", saveOptions);
The GanttChartColumn
constructor accepts three arguments: the column name, column width, and a TaskToColumnTextConverter
delegate that converts task data to display text. Example implementations:
1private string TaskName(Task task)
2{
3 StringBuilder res = new StringBuilder();
4 for (int i = 1; i < task.OutlineLevel; i++)
5 {
6 res.Append(" ");
7 }
8
9 res.AppendFormat("{0}. {1}", task.Id, task.Name);
10 return res.ToString();
11}
12
13private string TaskNameHtml(Task task)
14{
15 StringBuilder res = new StringBuilder();
16 for (int i = 1; i < task.OutlineLevel; i++)
17 {
18 res.Append(" ");
19 }
20
21 res.AppendFormat("{0}. {1}", task.Id, task.Name);
22 return res.ToString();
23}
24
25private string TaskNotes(Task task)
26{
27 return task.NotesText ?? string.Empty;
28}
29
30private string TaskResources(Task task)
31{
32 StringBuilder res = new StringBuilder();
33 Project project = task.ParentProject;
34 bool bFirst = true;
35 foreach (ResourceAssignment assignment in project.GetResourceAssignmentsByTask(task))
36 {
37 if (assignment.Resource != null)
38 {
39 if (!bFirst)
40 {
41 res.Append(", ");
42 }
43
44 res.Append(assignment.Resource.Name);
45 bFirst = false;
46 }
47 }
48
49 return res.ToString();
50}
Below are examples of resulting images exported using the above code:
Customize Gantt Chart Columns Using View
Using the View
class and its inheritors is the recommended approach for customizing chart output. The View
class corresponds to the view settings in Microsoft Project and provides a richer API compared to ProjectView
.
An existing view can be retrieved from the Views
collection (for MPP files), customized, and passed to the Project.Save
method via the SaveOptions.ViewSettings
property.
The following example demonstrates how to retrieve an existing view from an MPP file, insert a new column into it, and use this view for rendering the Gantt chart.
1Project project = new Project("input.mpp");
2
3// Get existing view
4var view = (GanttChartView) project.Views.GetByName("&Gantt Chart");
5
6// Define and insert new column
7TableField field = new TableField()
8{
9 AlignData = StringAlignment.Far,
10 Width = 50,
11 Field = Field.TaskName,
12 Title = "Task name"
13};
14
15view.Table.TableFields.Insert(1, field);
16
17PdfSaveOptions saveOptions = new PdfSaveOptions()
18{
19 ViewSettings = view
20};
21
22project.Save("output.pdf", saveOptions);
Висновок
Aspose.Tasks для .NET надає кілька варіантів налаштування візуалізації діаграми Ганта. Хоча ProjectView
дозволяє базову конфігурацію, його функціональність обмежена і вважається застарілим.
Для більш розширеного контролю та узгодження з візуальною структурою Microsoft Project рекомендується використовувати View
та пов’язані з ним класи. Цей підхід забезпечує кращу гнучкість і підходить для роботи з представленнями, визначеними у файлах MPP, або для програмного налаштування нових макетів представлень.