If you have technical questions, please create a support ticket in the DevExpress Support Center.
DevExtreme.MVC.Demos.Models.SampleData
DevExtreme.MVC.Demos.Models.Gantt
ExternalDependencies {
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.14/jspdf.plugin.autotable.min.js"></script>
<script>
window.jsPDF = window.jspdf.jsPDF;
applyPlugin(window.jsPDF);
</script>
}
Html.DevExtreme().Gantt<Task>() (
.ID("gantt")
.Tasks(t => t
.DataSource(ds => ds.Array().Data(SampleData.GanttTasks).Key("ID"))
.KeyExpr("ID")
.TitleExpr("Title")
.ParentIdExpr("ParentId")
.StartExpr("Start")
.EndExpr("End")
.ProgressExpr("Progress")
)
.Dependencies(d => d
.DataSource(ds => ds.Array().Data(SampleData.GanttDependencies).Key("ID"))
.KeyExpr("ID")
.PredecessorIdExpr("PredecessorId")
.SuccessorIdExpr("SuccessorId")
.TypeExpr("Type")
)
.Resources(r => r
.DataSource(ds => ds.Array().Data(SampleData.GanttResources).Key("ID"))
.KeyExpr("ID")
.TextExpr("Text")
)
.ResourceAssignments(ra => ra
.DataSource(ds => ds.Array().Data(SampleData.GanttResourceAssignments).Key("ID"))
.KeyExpr("ID")
.TaskIdExpr("TaskId")
.ResourceIdExpr("ResourceId")
)
.Editing(e => e.Enabled(true))
.Toolbar(t => {
t.Items(i => {
i.Add().Name(GanttToolbarItem.Undo);
i.Add().Name(GanttToolbarItem.Redo);
i.Add().Name(GanttToolbarItem.Separator);
i.Add().Name(GanttToolbarItem.ZoomIn);
i.Add().Name(GanttToolbarItem.ZoomOut);
i.Add().Name(GanttToolbarItem.Separator);
i.Add().Name("exportpdf")
.Widget(widget => widget.Button()
.OnClick("exportGantt")
.Icon("exportpdf")
.Hint("Export to PDF")
.StylingMode(ButtonStylingMode.Text)
);
});
})
.Columns(columns => {
columns.AddFor(m => m.Title)
.Caption("Subject")
.Width(300);
columns.AddFor(m => m.Start)
.Caption("Start Date");
columns.AddFor(m => m.End)
.Caption("End Date");
})
.ScaleType(GanttScaleType.Weeks)
.TaskListWidth(500)
)
<div class="options">
<div class="column">
<div class="caption">Export Options</div>
<div class="option">
<div class="label">Document format:</div>
<div class="value">
Html.DevExtreme().SelectBox() (
.InputAttr("aria-label", "Document Format")
.ID("formatSelector")
.DataSource(new[] { "A0", "A1", "A2", "A3", "A4", "Auto" })
.Value("A0")
)
</div>
</div>
<div class="option">
<div class="label">Landscape orientation:</div>
<div class="value">
Html.DevExtreme().CheckBox() (
.ID("landscapeCheckBoxContainer")
.Value(true)
)
</div>
</div>
<div class="option">
<div class="label">Export mode:</div>
<div class="value">
Html.DevExtreme().SelectBox() (
.ID("exportModeSelector")
.InputAttr("aria-label", "Export Mode")
.DataSource(new[] {
"All", "Chart", "Tree List"
})
.Value("All")
)
</div>
</div>
<div class="option">
<div class="label">Date range:</div>
<div class="value">
Html.DevExtreme().SelectBox() (
.ID("dataRangeSelector")
.InputAttr("aria-label", "Date Range")
.DataSource(new[] {
"All", "Visible", "Custom"
})
.Value("Visible")
.OnValueChanged("onDateRangeBoxValueChanged")
)
</div>
</div>
</div>
<div class="column">
<div class="caption">Task Filter Options</div>
<div class="option">
<div class="label">Start task (index):</div>
<div class="value">
Html.DevExtreme().NumberBox() (
.ID("startIndexContainer")
.Value(0)
.InputAttr("aria-label", "Start Task Index")
.Disabled(true)
.ShowSpinButtons(true)
)
</div>
</div>
<div class="option">
<div class="label">End task (index):</div>
<div class="value">
Html.DevExtreme().NumberBox() (
.ID("endIndexContainer")
.Value(3)
.InputAttr("aria-label", "End Task Index")
.Disabled(true)
.ShowSpinButtons(true)
)
</div>
</div>
<div class="option">
<div class="label">Start date:</div>
<div class="value">
Html.DevExtreme().DateBox() (
.InputAttr("aria-label", "Start Date")
.ID("startDateContainer")
.Type(DateBoxType.Date)
.Disabled(true)
.Value(SampleData.GanttTasks.First().Start)
)
</div>
</div>
<div class="option">
<div class="label">End date:</div>
<div class="value">
Html.DevExtreme().DateBox() (
.InputAttr("aria-label", "End Date")
.ID("endDateContainer")
.Type(DateBoxType.Date)
.Disabled(true)
.Value(SampleData.GanttTasks.First().End)
)
</div>
</div>
</div>
</div>
<script>
function getGanttInstance() {
return $("#gantt").dxGantt("instance");
}
function onDateRangeBoxValueChanged(arg) {
const disabled = arg.value !== "Custom";
changeCustomRangeEditorsDisabled(disabled);
}
function changeCustomRangeEditorsDisabled(disabled) {
$("#startIndexContainer").dxNumberBox("instance").option("disabled", disabled);
$("#endIndexContainer").dxNumberBox("instance").option("disabled", disabled);
$("#startDateContainer").dxDateBox("instance").option("disabled", disabled);
$("#endDateContainer").dxDateBox("instance").option("disabled", disabled);
}
function exportGantt() {
var ganttInstance = getGanttInstance();
const format = $("#formatSelector").dxSelectBox("option", "value").toLowerCase();
const isLandscape = $("#landscapeCheckBoxContainer").dxCheckBox("option", "value");
let exportMode = $("#exportModeSelector").dxSelectBox("option", "value");
exportMode = exportMode === "Tree List" ? "treeList" : exportMode.toLowerCase();
const dataRangeMode = $("#dataRangeSelector").dxSelectBox("option", "value").toLowerCase();
let dataRange;
if (dataRangeMode === 'custom') {
dataRange = {
startIndex: $("#startIndexContainer").dxNumberBox("option", "value"),
endIndex: $("#endIndexContainer").dxNumberBox("option", "value"),
startDate: $("#startDateContainer").dxDateBox("option", "value"),
endDate: $("#endDateContainer").dxDateBox("option", "value")
}
}
else {
dataRange = dataRangeMode
}
DevExpress.pdfExporter.exportGantt({
component: ganttInstance,
createDocumentMethod: (args) => new jsPDF(args),
format: format,
landscape: isLandscape,
exportMode: exportMode,
dateRange: dataRange
}
).then(doc => {
doc.save('gantt.pdf');
});
}
</script>
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
This demo allows you to apply the following built-in export and task filter options:
Export Options
Document format - Specifies document size.
Landscape orientation – Renders the PDF horizontally.
Export mode - Specifies Gantt regions to include within the exported document (chart area, tree list area, or the entire component).
Task Filter Options
Date range - Restricts data output against a specified date range.
Start task (index) – Restricts data output against the start task's index within an index range.
End task (index) – Restricts data output against the end task's index within an index range.
Start date (task)- Restricts data output by start date.
End date (task) – Restricts data output by end date.
Click the “Export” toolbar item to call the exportGantt(options) method (exports Gantt data with specified export options).
To enable PDF export operations, you must reference or import the following:
-
jsPDF
A library that creates and manages PDF documents. -
jsPDF-AutoTable
A plugin that creates and manages tables in PDF documents.