更新:该问题已在 2016 Q1 版本中修复。对于以前的版本,可以使用 OnClientPdfExporting 事件作为解决方法
<telerik:RadGantt OnClientPdfExporting="OnClientPdfExporting" ... >
<script>
var $ = $ || $telerik.$;
function OnClientPdfExporting(sender, args) {
var elem = sender.get_element();
var originalWidth = sender.get_width();
var originalListWidth = sender.get_listWidth();
var width = $(elem).find(".rgtTreelistWrapper").width() +
$(elem).find(".radFauxRows").width();
sender.set_listWidth($(elem).find(".rgtTreelistWrapper").width())
sender.set_width(width);
// http://stackoverflow.com/questions/779379/why-is-settimeoutfn-0-sometimes-useful
setTimeout(function () {
sender.set_width(originalWidth);
sender.set_listWidth(originalListWidth);
})
}
我已经测试了提供的片段和内置的导出作品,如此屏幕截图所示。
这是我使用的完整代码。
<form id="form1" runat="server">
<telerik:RadScriptManager ID="RadScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" />
</Scripts>
</telerik:RadScriptManager>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pako/1.0.7/pako_deflate.min.js"></script>
<telerik:RadGantt
runat="server"
ID="RadGantt1" Skin="Metro"
ReadOnly="true"
Height="450px"
AutoGenerateColumns="false"
EnablePdfExport="true">
<Columns>
<telerik:GanttBoundColumn DataField="Title" DataType="String" Width="160px"></telerik:GanttBoundColumn>
<telerik:GanttBoundColumn DataField="Start" HeaderText="Start" Width="85px" DataFormatString="dd-MMM-yyyy" DataType="DateTime"></telerik:GanttBoundColumn>
<telerik:GanttBoundColumn DataField="End" HeaderText="End" Width="85px" DataFormatString="dd-MMM-yyyy" DataType="DateTime"></telerik:GanttBoundColumn>
</Columns>
<DataBindings>
<TasksDataBindings
IdField="ID" ParentIdField="ParentID" SummaryField="Summary"
StartField="Start" EndField="End"
TitleField="Title" PercentCompleteField="PercentComplete" />
</DataBindings>
</telerik:RadGantt>
private DataTable GetGanttTasksSource()
{
DataTable dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn("ID", typeof(int)));
dataTable.Columns.Add(new DataColumn("ParentID", typeof(int)));
dataTable.Columns.Add(new DataColumn("OrderID", typeof(int)));
dataTable.Columns.Add(new DataColumn("Title", typeof(string)));
dataTable.Columns.Add(new DataColumn("Start", typeof(DateTime)));
dataTable.Columns.Add(new DataColumn("End", typeof(DateTime)));
dataTable.Columns.Add(new DataColumn("PercentComplete", typeof(decimal)));
dataTable.Columns.Add(new DataColumn("Expanded", typeof(bool)));
dataTable.Columns.Add(new DataColumn("Summary", typeof(bool)));
dataTable.PrimaryKey = new DataColumn[] { dataTable.Columns["ID"] };
int parentsCount = 4;
for (int i = 1; i <= parentsCount; i++)
{
DataRow row = dataTable.NewRow();
row["ID"] = i;
row["ParentID"] = DBNull.Value;
row["OrderID"] = i;
row["Title"] = "Task #" + (i);
row["Start"] = DateTime.Now.AddDays(i - 1);
row["End"] = DateTime.Now.AddDays(i);
row["PercentComplete"] = 0.2M;
if (i == parentsCount)
{
row["Expanded"] = false;
}
else
{
row["Expanded"] = DBNull.Value;
}
row["Summary"] = i == parentsCount; // last task is a parent/summary
dataTable.Rows.Add(row);
}
for (int i = parentsCount + 1; i <= parentsCount + 5; i++)
{
DataRow row = dataTable.NewRow();
row["ID"] = i;
row["ParentID"] = parentsCount;
row["OrderID"] = i;
row["Title"] = "Task #" + (i);
row["Start"] = DateTime.Now.AddDays(i - 1);
row["End"] = DateTime.Now.AddDays(i);
row["PercentComplete"] = 0.4M;
row["Expanded"] = DBNull.Value;
row["Summary"] = false;
dataTable.Rows.Add(row);
}
return dataTable;
}
我建议检查的一些事情是:
- 最新版本的 Telerik 是否复制了该问题
- 这是特定于浏览器的问题,即它是在所有浏览器上观察到还是仅在其中一个浏览器上观察到
- 浏览器控制台中是否有任何 JavaScript 错误