DevExpress GridView导出PDF列宽自适应的代码实现方法
DevExpress GridView导出PDF列宽自动适配实现方案
直接调用ExportToPdf方法默认会沿用GridView当前界面的列宽配置,所以会出现列宽不合理、内容被截断或者页面留白过多的问题,根据需求选以下两种方案即可:
- 方案1:按单元格/列头内容自动匹配最佳列宽(推荐)
该方案会先根据所有列的表头、单元格内容计算最合适的宽度再导出,导出完成后自动还原界面原有列宽,不会影响用户在界面上手动调整的列宽配置。
替换原有导出逻辑为以下代码即可:
private void navBarPdf_ElementClick(object sender, NavElementEventArgs e) { var save = new SaveFileDialog(); if (save.ShowDialog() == DialogResult.OK) { // 缓存所有列原始宽度 Dictionary<GridColumn, int> originColWidths = new Dictionary<GridColumn, int>(); foreach (GridColumn column in gridView1.Columns) { originColWidths.Add(column, column.Width); } try { // 计算最佳列宽,参数指定同时匹配列头和所有单元格内容 gridView1.BestFitColumns(BestFitColumnMode.AllCells); // 执行导出 gridView1.ExportToPdf($"{save.FileName}.pdf"); } finally { // 还原界面列宽 foreach (var item in originColWidths) { item.Key.Width = item.Value; } } } }
- 方案2:自动拉伸列撑满PDF页面宽度
如果不需要按内容匹配宽度,只是想让所有列自动拉伸填满PDF整个页面、消除侧边留白,不需要改动界面列宽,只需要修改导出配置即可:
private void navBarPdf_ElementClick(object sender, NavElementEventArgs e) { var save = new SaveFileDialog(); if (save.ShowDialog() == DialogResult.OK) { // 开启打印导出时自动调整列宽适配页面 gridView1.OptionsPrint.AutoWidth = true; PdfExportOptions exportOptions = new PdfExportOptions(); // 关闭不必要的导出警告 exportOptions.ShowPrintExportWarnings = false; // 传入配置导出PDF gridView1.ExportToPdf($"{save.FileName}.pdf", exportOptions); } }
优化提示:如果绑定的数据源行数超过10万,调用
BestFitColumns全量遍历所有行计算宽度会有明显卡顿,可以传入行限制参数,比如gridView1.BestFitColumns(BestFitColumnMode.AllCells, 1000),仅遍历前1000行计算宽度,能大幅缩短计算时间,宽度匹配精度也能满足绝大多数场景需求。
内容的提问来源于stack exchange,提问作者cheleby
相关产品推荐
相关产品推荐

