You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AnyGantt技术咨询:如何打印全部任务及解决print API仅打当前视图问题

解决AnyGantt打印可见时间范围内所有纵向项目的问题

当然可以实现这个需求!默认的print()方法确实只会捕获当前视口的内容,但我们可以通过调整图表布局+打印配置的组合来实现打印可见时间范围内的所有纵向项目。下面是具体的实现步骤和代码示例:

方法一:临时调整图表高度以显示所有项目后打印

这个思路是先保存当前图表的状态(比如高度、时间范围),然后临时调整图表高度让所有纵向项目都显示在当前时间范围内,打印完成后再恢复原状态:

// 1. 保存当前图表的配置
const originalHeight = chart.container().offsetHeight;
const originalTimeRange = chart.getVisibleRange();

// 2. 临时调整图表高度,让所有行(项目)都显示出来
chart.fitAllRows(); // 这个方法会自动调整图表高度以适配所有项目

// 3. 调用打印API,指定打印当前可见的时间范围(也就是你之前设置的时间区间)
chart.print({
  title: "甘特图打印",
  // 确保打印的是当前的时间范围,不自动扩展
  timeRange: originalTimeRange
});

// 4. 打印完成后恢复原图表高度(用setTimeout确保打印操作完成)
setTimeout(() => {
  chart.container().style.height = `${originalHeight}px`;
  chart.draw(); // 重新绘制图表恢复原状态
}, 1000);

方法二:使用导出API生成完整内容后打印

如果临时调整高度的方式不符合你的需求,也可以先将可见时间范围内的所有项目导出为PDF或图片,再打印导出的文件:

// 导出可见时间范围内的所有项目为PDF
chart.exportToPDF({
  timeRange: chart.getVisibleRange(), // 锁定时间范围为当前可见区间
  exportMode: "allRows" // 导出所有行(纵向所有项目)
}).then(function(data) {
  // 创建临时a标签来下载并打印PDF
  const blob = new Blob([data], {type: 'application/pdf'});
  const url = URL.createObjectURL(blob);
  const printWindow = window.open(url);
  printWindow.onload = function() {
    printWindow.print();
    URL.revokeObjectURL(url);
    printWindow.close();
  };
});

关键配置说明

  • fitAllRows():AnyGantt提供的方法,自动调整图表高度以显示所有行项目,不需要手动计算高度。
  • print()方法的timeRange参数:指定打印的时间范围,传入当前的可见范围就能确保只打印你想要的时间区间。
  • exportToPDF()的exportMode: "allRows":强制导出所有纵向项目,即使它们不在当前视口中。

需要注意的是,如果你使用的是旧版本的AnyGantt,部分方法可能略有不同,建议根据你使用的版本调整对应的API调用。

内容的提问来源于stack exchange,提问作者Mendi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:44:22