PDF export in Angular Gantt component
18 Oct 202523 minutes to read
PDF export in the Angular Gantt component enables exporting project data to PDF documents for sharing or archiving, using the pdfExport method with allowPdfExport set totrue and PdfExport module injected. This feature supports exporting timelines, tasks, and dependencies, with options for indicators via base64 images, blob objects for previews, single-page layouts, multiple Gantt instances in one file, and themes like Material or Bootstrap. Focus on auto-scheduled tasks for accurate export, as manual scheduling is not currently supported.
Export basic Gantt data
Export Gantt data to PDF by setting allowPdfExport totrue and calling pdfExport, which generates a document with the chart and tree-grid data.
import { Component, ViewEncapsulation, OnInit, ViewChild } from '@angular/core';
import { GanttModule, ToolbarService, PdfExportService, SelectionService, GanttComponent, ToolbarItem } from '@syncfusion/ej2-angular-gantt'
import { ClickEventArgs } from '@syncfusion/ej2-angular-navigations';
import { editingData } from './data';
@Component({
imports: [GanttModule],
providers: [ToolbarService, PdfExportService, SelectionService],
standalone: true,
selector: 'app-root',
template:
`<ejs-gantt #gantt id="ganttDefault" height="430px" [dataSource]="data" [taskFields]="taskSettings" [toolbar]="toolbar"
(toolbarClick)="toolbarClick($event)" allowPdfExport='true'></ejs-gantt>`,
encapsulation: ViewEncapsulation.None
})
export class AppComponent implements OnInit {
@ViewChild('gantt', { static: true }) public ganttChart?: GanttComponent;
public data?: object[];
public taskSettings?: object;
public toolbar?: ToolbarItem[];
public ngOnInit(): void {
this.data = editingData;
this.taskSettings = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
parentID: 'ParentID'
};
this.toolbar = ['PdfExport'];
}
public toolbarClick(args: ClickEventArgs): void {
if (args.item.id === 'ganttDefault_pdfexport') {
this.ganttChart!.pdfExport();
}
};
}import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));Include indicators in PDF export
Include dynamic indicators and images in PDF export by defining them with base64 encoding in the data source, mapped to the taskFields.indicators property, enhancing visual representation of task status.
import { Component, ViewEncapsulation, OnInit, ViewChild } from '@angular/core';
import { GanttModule, ToolbarService, GanttComponent, ToolbarItem, PdfExportService, SelectionService } from '@syncfusion/ej2-angular-gantt'
import { ClickEventArgs } from '@syncfusion/ej2-angular-navigations';
import { editingData } from './data';
@Component({
imports: [GanttModule],
providers: [ToolbarService, PdfExportService, SelectionService],
standalone: true,
selector: 'app-root',
template:
`<ejs-gantt #gantt id="ganttDefault" height="430px" [dataSource]="data" [taskFields]="taskSettings" [toolbar]="toolbar"
(toolbarClick)="toolbarClick($event)" allowPdfExport='true'></ejs-gantt>`,
encapsulation: ViewEncapsulation.None
})
export class AppComponent implements OnInit {
@ViewChild('gantt', { static: true }) public ganttChart?: GanttComponent;
public data?: object[];
public taskSettings?: object;
public toolbar?: ToolbarItem[];
public ngOnInit(): void {
this.data = editingData;
this.taskSettings = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
parentID: 'ParentID',
indicators: 'Indicators'
};
this.toolbar = ['PdfExport'];
}
public toolbarClick(args: ClickEventArgs): void {
if (args.item.id === 'ganttDefault_pdfexport') {
this.ganttChart!.pdfExport();
}
};
}import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));Export Gantt data as blob object
Export Gantt data as a blob object for previews or modifications by setting the fourth argument of pdfExport totrue, with the blob returned in the pdfExportComplete event.
import { Component, ViewEncapsulation, OnInit, ViewChild } from '@angular/core';
import { GanttAllModule, ToolbarItem, GanttComponent } from '@syncfusion/ej2-angular-gantt';
import { ClickEventArgs } from '@syncfusion/ej2-angular-navigations';
import { ExcelExportCompleteArgs, PdfExportCompleteArgs } from '@syncfusion/ej2-angular-grids';
import { editingData } from './data';
@Component({
imports: [GanttAllModule],
standalone: true,
selector: 'app-root',
template:
`<ejs-gantt #gantt id="ganttDefault" height="430px" [dataSource]="data" [taskFields]="taskSettings" [toolbar]="toolbar"
(toolbarClick)="toolbarClick($event)" (excelExportComplete)='excelExpComplete($event)' (pdfExportComplete)='pdfExpComplete($event)' allowPdfExport='true' allowExcelExport='true' [treeColumnIndex]="1"></ejs-gantt>`,
encapsulation: ViewEncapsulation.None,
})
export class AppComponent implements OnInit {
@ViewChild('gantt', { static: true }) public ganttChart?: GanttComponent;
public data?: object[];
public taskSettings?: object;
public toolbar?: ToolbarItem[];
public ngOnInit(): void {
this.data = editingData;
this.taskSettings = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
parentID: 'ParentID',
};
this.toolbar = ['PdfExport', 'ExcelExport'];
}
public toolbarClick(args: ClickEventArgs): void {
if (args.item.id === 'ganttDefault_pdfexport') {
this.ganttChart!.pdfExport(undefined, undefined, undefined, true);
}
if (args.item.id === 'ganttDefault_excelexport') {
this.ganttChart!.excelExport(undefined, undefined, undefined, true);
}
};
public excelExpComplete(args: ExcelExportCompleteArgs) {
// This event will be triggered when excel exporting.
args.promise!.then((e: { blobData: Blob }) => {
// In this `then` function, we can get blob data through the arguments after promise resolved.
this.exportBlob(e.blobData);
});
}
public pdfExpComplete(args: PdfExportCompleteArgs) {
// This event will be triggered when pdf exporting.
args.promise!.then((e: { blobData: Blob }) => {
// In this `then` function, we can get blob data through the arguments after promise resolved.
this.exportBlob(e.blobData);
});
}
public exportBlob = (blob: Blob) => {
const a: HTMLAnchorElement = document.createElement('a');
document.body.appendChild(a);
a.style.display = 'none';
const url: string = (window.URL.createObjectURL(blob));
a.href = url;
a.download = 'Export';
a.click();
(window.URL.revokeObjectURL(url));
document.body.removeChild(a);
}
}import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));Single page exporting in Gantt
Export Gantt rows to a single PDF page by setting fitToWidthSettings.isFitToWidth totrue in PdfExportProperties. Customize chart and grid widths using chartWidth and gridWidth as percentages.
import { Component, ViewEncapsulation, OnInit, ViewChild } from '@angular/core';
import { GanttModule, GanttComponent, ToolbarItem, PdfExportProperties, ToolbarService, PdfExportService, SelectionService } from '@syncfusion/ej2-angular-gantt';
import { ClickEventArgs } from '@syncfusion/ej2-navigations/src/toolbar/toolbar';
import { editingData } from './data';
@Component({
imports: [GanttModule],
providers: [ToolbarService, PdfExportService, SelectionService],
standalone: true,
selector: 'app-root',
template:
`<ejs-gantt #gantt id="ganttDefault" height="430px" [dataSource]="data" [taskFields]="taskSettings" [toolbar]="toolbar"
(toolbarClick)="toolbarClick($event)" allowPdfExport='true'></ejs-gantt>`,
encapsulation: ViewEncapsulation.None
})
export class AppComponent implements OnInit {
@ViewChild('gantt', { static: true }) public ganttChart?: GanttComponent;
public data?: object[];
public taskSettings?: object;
public toolbar?: ToolbarItem[];
public ngOnInit(): void {
this.data = editingData;
this.taskSettings = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
parentID: 'ParentID',
};
this.toolbar = ['PdfExport'];
}
public toolbarClick(args: ClickEventArgs): void {
if (args.item.id === 'ganttDefault_pdfexport') {
let exportProperties: PdfExportProperties = {
fitToWidthSettings: {
isFitToWidth: true,
}
};
this.ganttChart!.pdfExport(exportProperties);
}
};
}import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));Multiple Gantt exporting
Export multiple Gantt instances to a single PDF file by calling pdfExport on each, with each Gantt exported to a new page in the same document.
import { Component, ViewEncapsulation, OnInit, ViewChild } from '@angular/core';
import { GanttModule, ToolbarService, PdfExportService, SelectionService, GanttComponent, ToolbarItem } from '@syncfusion/ej2-angular-gantt'
import { ClickEventArgs } from '@syncfusion/ej2-navigations';
import { editingData1, editingData2 } from './data';
@Component({
imports: [GanttModule],
providers: [ToolbarService, PdfExportService, SelectionService],
standalone: true,
selector: 'app-root',
template:
`<p><b>First Gantt:</b></p>
<ejs-gantt #gantt1 id="ganttDefault1" height="280px" [dataSource]="firstGanttData" [taskFields]="fTaskSettings" [toolbar]="toolbar"
(toolbarClick)="toolbarClick($event)" allowPdfExport='true' [treeColumnIndex]="1" [projectStartDate]="projectStartDate" [projectEndDate]="projectEndDate"></ejs-gantt>
<p><b>Second Gantt:</b></p>
<ejs-gantt #gantt2 id="ganttDefault2" height="250px" [dataSource]="secondGanttData" [taskFields]="sTaskSettings" allowPdfExport='true' [treeColumnIndex]="1"></ejs-gantt>`,
encapsulation: ViewEncapsulation.None
})
export class AppComponent implements OnInit {
@ViewChild('gantt1', { static: true }) public firstGanttInstance?: GanttComponent;
@ViewChild('gantt2', { static: true }) public secondGanttInstance?: GanttComponent;
public firstGanttData?: object[];
public secondGanttData?: object[];
public fTaskSettings?: object;
public sTaskSettings?: object;
public toolbar?: ToolbarItem[];
public projectStartDate?: Date;
public projectEndDate?: Date;
public ngOnInit(): void {
this.firstGanttData = editingData1;
this.secondGanttData = editingData2;
this.fTaskSettings = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
parentID: 'ParentID',
};
this.sTaskSettings = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
parentID: 'ParentID',
};
this.toolbar = ['PdfExport'];
this.projectStartDate = new Date('03/31/2019');
this.projectEndDate = new Date('04/14/2019');
}
public toolbarClick(args: ClickEventArgs): void {
if (args.item.id === 'ganttDefault1_pdfexport') {
const firstGanttExport: Promise<any> = this.firstGanttInstance!.pdfExport({}, true);
firstGanttExport.then((firstGanttData: any) => {
this.secondGanttInstance?.pdfExport({}, false, firstGanttData);
});
}
};
}import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));Apply themes in PDF export
Apply themes to exported PDF documents by setting the theme property in PdfExportProperties to values like Material, Fabric, Bootstrap, or Bootstrap4, customizing the appearance.
import { Component, ViewEncapsulation, OnInit, ViewChild } from '@angular/core';
import { GanttModule, ToolbarService, PdfExportService, SelectionService, GanttComponent, PdfExportProperties, ToolbarItem } from '@syncfusion/ej2-angular-gantt'
import { ClickEventArgs } from '@syncfusion/ej2-navigations';
import { editingData } from './data';
@Component({
imports: [GanttModule],
providers: [ToolbarService, PdfExportService, SelectionService],
standalone: true,
selector: 'app-root',
template:
`<ejs-gantt #gantt id="ganttDefault" height="430px" [dataSource]="data" [taskFields]="taskSettings" [toolbar]="toolbar"
(toolbarClick)="toolbarClick($event)" allowPdfExport='true' [treeColumnIndex]="1"></ejs-gantt>`,
encapsulation: ViewEncapsulation.None
})
export class AppComponent implements OnInit {
@ViewChild('gantt', { static: true }) public ganttInstance?: GanttComponent;
public data?: object[];
public taskSettings?: object;
public toolbar?: ToolbarItem[];
public ngOnInit(): void {
this.data = editingData;
this.taskSettings = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
parentID: 'ParentID',
};
this.toolbar = ['PdfExport'];
}
public toolbarClick(args: ClickEventArgs): void {
if (args.item.id === 'ganttDefault_pdfexport') {
let exportProperties: PdfExportProperties = {
theme: "Fabric"
};
this.ganttInstance!.pdfExport(exportProperties);
}
};
}import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));