导出为 PDF 和 PNG

dhtmlxGantt 提供了一个在线导出服务,允许您将甘特图保存为 PDFPNG 文件。

该服务可免费使用,但导出的 PDF/PNG 文件会在 GPL 许可证下包含库的水印。 如果您购买了许可证,在有效的支持期内(所有 PRO 许可证为 12 个月),导出将不带水印。

您也可以在本地计算机上搭建多种导出服务,实现本地导出甘特图为 PDF 或 PNG。 请注意,导出服务并未随 Gantt 包一同提供——请查阅 相关文档 了解各服务的使用条款。

在线导出服务限制

导出服务对处理时间和请求大小有限制。

时间限制

如果导出过程超过 20 秒,将会被终止,并显示如下错误:

Error: Timeout trigger 20 seconds

当多位用户同时导出甘特图时,处理时间可能会变长,但每个用户的请求时间是单独计算的。

请求大小限制

通用 API 端点 https://export.dhtmlx.com/gantt 处理所有导出方法(exportToPDFexportToPNGexportToMSProject 等)。该端点的最大请求大小为 10 MB

还有一个专用 API 端点 https://export.dhtmlx.com/gantt/project,用于 MSProjectPrimavera P6 的导出/导入服务(仅限 exportToMSProject / importFromMSProject / exportToPrimaveraP6 / importFromPrimaveraP6)。该端点支持最大 40 MB 的请求。

使用导出模块

如需导出大型甘特图,您可以使用 独立导出模块。 如果您拥有 CommercialEnterpriseUltimate 许可证,则该模块免费;也可以单独购买

查看更多关于 PDF 导出模块的使用详情

导出为 PDF

要将甘特图导出为 PDF,请按照以下步骤操作:

  • 使用 plugins 方法启用 export_api 插件:
gantt.plugins({
    export_api: true
});

如果您使用的是 8.0 以下版本的 Gantt,请在页面中引入 https://export.dhtmlx.com/gantt/api.js 以启用在线导出服务,例如:

<script src="codebase/dhtmlxgantt.js"></script>
<script src="https://export.dhtmlx.com/gantt/api.js"></script>

<input value="Export to PDF" type="button" onclick='gantt.exportToPDF()'> 
<script>
    gantt.init("gantt_here");
    gantt.parse(demo_tasks);
</script>

Related sample:  Export data from Gantt

导出为 PNG

要将甘特图导出为 PNG 图片,请按照以下步骤操作:

  • 使用 plugins 方法启用 export_api 插件:
gantt.plugins({
    export_api: true
});

如果您使用的是 8.0 以下版本的 Gantt,请在页面中引入 https://export.dhtmlx.com/gantt/api.js 以启用在线导出服务,例如:

<script src="codebase/dhtmlxgantt.js"></script>
<script src="https://export.dhtmlx.com/gantt/api.js"></script>

<input value="Export to PNG" type="button" onclick='gantt.exportToPNG()'> 
<script>
    gantt.init("gantt_here");
    gantt.parse(demo_tasks);
</script>

Related sample:  Export data from Gantt

导出方法的参数

exportToPDFexportToPNG 方法接受包含多种可选属性的对象作为参数:


调用导出方法并包含可选属性的示例

gantt.exportToPDF({
    name:"mygantt.pdf",
    header:"<h1>My company</h1>",
    footer:"<h4>Bottom line</h4>",
    locale:"en",
    start:"01-04-2013",
    end:"11-04-2013",
    skin:'terrace',
    data:{ },
    server:"https://myapp.com/myexport/gantt",
    raw:true,
    callback: function(res){
        alert(res.url);
    }
});
 
gantt.exportToPNG({
    name:"mygantt.png",
    header:"<h1>My company</h1>",
    footer:"<h4>Bottom line</h4>",
    locale:"en",
    start:"01-04-2013",
    end:"11-04-2013",
    skin:'terrace',
    data:{ },
    server:"https://myapp.com/myexport/gantt",
    raw:true,
    callback: function(res){
        alert(res.url);
    }
});

输出文件名

如需自定义导出文件的名称,请在 exportToPDF/exportToPNG 参数中设置 name 属性:

gantt.exportToPDF({
    name:"my_beautiful_gantt.pdf"});

输出文件的语言

默认情况下,导出的甘特图使用与页面显示相同的语言。

如需导出为不同语言,请在 exportToPDF/exportToPNG 参数中设置 locale 属性:

gantt.exportToPDF({
    name:"mygantt.pdf",
    locale:"de" });

导出数据

有两种方式指定导出的 PDF 或 PNG 中包含哪些任务:

  1. 定义输出数据的日期范围。
  2. 为导出提供自定义数据源。

定义需导出的任务日期范围

要设置导出包含的任务范围,可在 exportToPDF/exportToPNG 参数中使用 startend 属性:

gantt.exportToPDF({
    name:"mygantt.pdf",
    start:"01-04-2013",    end:"11-04-2013"});

请注意,日期格式由 date_format 配置控制。

设置自定义导出数据源

如果希望导出甘特图时使用与当前显示不同的数据集,可在 exportToPDF/exportToPNG 方法参数中使用 data 属性:

gantt.exportToPDF({
    data:{        data:[
            {id:1, text:"Project #1", start_date:"01-04-2013", duration:18},
            {id:2, text:"Task #1", start_date:"02-04-2013",duration:8, parent:1},
            {id:3, text:"Task #2", start_date:"11-04-2013",duration:8, parent:1}
        ],
        links:[
            {id:1, source:1, target:2, type:"1"},
            {id:2, source:2, target:3, type:"0"},
            {id:3, source:3, target:4, type:"0"},
            {id:4, source:2, target:5, type:"2"}
        ]
    }
});

请注意,data 参数必须是包含数据的对象,不能直接传递 URL 作为其值。

输出甘特图的皮肤

默认情况下,导出的甘特图与页面显示的皮肤一致。

如需在导出的 PNG 或 PDF 文件中应用不同皮肤,请在 exportToPDF/exportToPNG 方法参数中设置 skin 属性:

gantt.exportToPDF({
    name:"mygantt.pdf",
    skin:"material" });

查看所有可用甘特皮肤列表

输出文件的页眉/页脚

您可以通过在 exportToPDF/exportToPNG 方法的参数中使用 headerfooter 属性,为导出的 PNG 或 PDF 文件添加页眉或页脚:

您可以在这些参数中包含任何 HTML。当添加图片时,请确保 "src" 属性使用全局路径。

gantt.exportToPDF({
    name:"mygantt.pdf",
    header:"<h1>My company</h1>",    footer:"<h4>Bottom line</h4>"});

输出文件的自定义样式

要自定义导出 Gantt 图表的样式,您可以通过两种方式提供带有 CSS 类的样式表:

  • 通过链接外部样式表:
gantt.exportToPDF({
    name:"calendar.pdf",
    header:'<link rel="stylesheet" href="http://mysite.com/custom.css">' });
  • 或者通过 'style' 标签直接嵌入样式:
gantt.exportToPDF({
    name:"calendar.pdf",
    header:'<style>... custom css classes here ...</style>' });

请注意,此方法适用于全局可访问的 HTTP 引用。如果您的 CSS 文件托管在内网或本地,可以直接嵌入样式,如下所示:

gantt.exportToPDF({
    header:"<style>.tier1{background: red; color:white;}</style>"
});

为导出功能收集所有样式

有时样式分布在多个文件中且无法公开访问,这使得逐个包含变得不便。您可以收集页面上使用的所有样式,并将其包含在导出的 header 中。

所有样式都可通过 document.styleSheets 对象获取。如果样式来自同一域,您可以收集其 CSS 规则并插入到 header。示例:

const styles = []
for (el in document.styleSheets) {
    try {
        const rules = (document.styleSheets[el]).cssRules;
        for (rule in rules) {
            styles.push(rules[rule].cssText)
        }
    }
    catch (e) { }
}
 
gantt.exportToPDF({
    raw: true,
    header: "<style>" + styles.join(" ") + "</style>"
});

Related sample:   Export Gantt with custom icons to PDF

Related sample:   Export Gantt with resource load diagram to PDF with no need to specify styles

导出自定义标记和样式

默认情况下,Gantt 图表根据提供的配置和已加载的数据进行导出,但 自定义元素 以及某些模板不会被包含。

要完整导出当前 Gantt 标记(包括所有自定义元素),请在 exportToPDF/exportToPNG 方法的参数中设置 raw:true 属性。

gantt.exportToPDF({
    raw:true
});

请注意,自定义元素需要 自定义样式 才能正确显示。

此外,使用此模式会增加 API 请求的大小。大型图表可能会超过在线导出服务的 10MB 限制而导致导出失败。在这种情况下,您需要在本地安装 导出服务 并相应调整请求大小。
请参考 系统要求 以设置本地导出服务。

导出 HTML 元素

将 Gantt 图表导出为 PNG 或 PDF 时,请注意由于安全原因,导出 HTML 元素存在一定限制。

某些 HTML 元素如 <canvas><svg><script> 以及 src 属性中带有 Base64 数据的图片会被限制。但仍有安全方式可导出 SVG 和 Base64 格式的图片:

  • 使用 <img> 元素,并将 src 属性指向 SVG 图片的 URL(适用于 PNG 和 JPG 导出,但不支持 Base64),例如:
<img src=https://www.svgrepo.com/download/530597/hat.svg>
  • 使用 CSS 样式如 backgroundbackground-image,其 url 值可指向图片 URL 或 Base64 数据(适用于 PNG、JPG 和 SVG 导出):
.red {
    background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH1ggDCwMADQ4NnwAAAFVJREFUGJWNkMEJADEIBEcbSDkXUnfSgnBVeZ8LSAjiwjyEQXSFEIcHGP9oAi+H0Bymgx9MhxbFdZE2a0s9kTZdw01ZhhYkABSwgmf1Z6r1SNyfFf4BZ+ZUExcNUQUAAAAASUVORK5CYII=") 100%/contain no-repeat;
    display: inline-block;
    width: 32px;
    height: 32px;
}

Related sample:  Exporting safe and insecure HTML elements to PDF

如果您有导出模块并需要导出在线导出服务器不支持的 HTML 元素,可以联系技术支持获取指导,以修改您的模块解除这些限制。但请注意,这可能会使您的服务器暴露于 XSS 漏洞风险。

Back to top