Highcharts 前端导出详解:如何实现纯客户端导出(Offline Exporting)

客户端导出

默认导出本地

从版本 12.3.0 开始,exporting.js 模块默认在本地处理导出为 PNG、JPEG 和 SVG 格式,而无需依赖 offline-exporting.js 模块。此行为由 exporting.local 选项控制,默认设置为空。

离线导出逻辑允许在不将数据发送到外部服务器的情况下导出图表图片。如果你符合以下情况,这将是解决方案:

  • 想避免让用户将你的图表配置发送到Highsoft的服务器

  • 想节省搭建自己服务器的成本

  • 不需要导出即可在旧版浏览器中使用

在 jsFiddle 上实时查看.

离线导出模块

唯一的例外是需要使用offline-exporting.js模块进行本地导出的是PDF格式

该模块利用现代浏览器技术实现此功能,因此在较旧的浏览器中可能无法完美运行。支持的浏览器详细列表见下表。在不支持的浏览器中,模块默认会回退到导出服务器,但可以通过 exporting.fallbackToExportServer选项禁用此功能。

此外,Internet Explorer 需要 canvg 库才能导出 PNG 格式以及导出带有嵌入图片的图表。导出 PDF 还需要所有浏览器都使用 jsPDFsvg2pdf和 svg2pdf。默认情况下,模块会根据需要从我们的服务器加载这些文件,但可以通过 exporting.libURL 选项更改 URL。如果页面已经加载了这些脚本,Highcharts 将不会再次加载它们。请注意,即使加载了这些文件,也不会将任何图表数据发送到我们的服务器。

PDF不支持带图片的导出,将会退回到导出服务器

注意:客户端导出模块中的PDF导出是一个可选择的功能。启用本地PDF导出(例如,通过在标签中添加downloadPDF到contextButton.menuItems)需要使用第三方库。这些库不在Highcharts的许可范围内,也不由Highcharts提供、授权或担保,Highcharts不对其安全性或维护负责。

要使用该模块,只需在导出模块之后包含它。导出模块是必需的依赖,即使禁用回退也一样。

复制代码
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/offline-exporting.js"></script>

浏览器支持表

Chrome 最新版) Firefox 最新版) Edge 最新版) Safari 最新版) Safari 5.1 IE 10-11 Android最新版) Android (4.0) Chrome for Android Safari for iOS Chrome for iOS
SVG OK OK OK OK 打开数据URI OK OK 打开数据URI OK OK OK
PNG/JPEG OK OK OK OK 打开数据URI OK OK 打开数据URI OK OK OK
PDF OK OK OK OK 回退到导出服务器 回退到导出服务器 OK 回退到导出服务器 OK OK OK
带图片的SVG(同一服务器) OK OK OK OK 打开数据URI OK OK 打开数据URI OK OK OK
带图片的PNG/JPEG(同一服务器) OK OK OK OK 不是最佳的图片 回退到导出服务器 OK 打开数据URI OK OK OK
带图片的SVG(支持跨域资源共享的服务器) OK OK OK OK 回退到导出服务器 回退到导出服务器 OK 回退到导出服务器 OK OK OK
带图片的PNG/JPEG(支持跨域资源共享的服务器) OK OK OK OK 回退到导出服务器 回退到导出服务器 OK 回退到导出服务器 OK OK OK

Internet Explorer 9 及更早版本将在所有情况下尝试回退到导出服务器。

『模块的决策流程图(点击查看大图):』

在包含非拉丁字符或Unicode字符/UTF-8的语言中导出本地PDF

jsPDF docs文档 所述,PDF 中的 14 种标准字体仅支持 ASCII 编码页。因此,为了支持例如中文文本在导出的 PDF 中,必须将一个或多个 TTF 字体文件传递给导出模块。

TTF 字体文件可以从多个在线资源获取。一个不错的资源是 Google 字体库,以及支持多种语言的 Noto 字体系列。鉴于涉及的语言和字符数量,没有单一的字体文件可以涵盖所有语言。

『为了我们的功能演示,我们正在从我们自己的网站加载字体文件:』

复制代码
exporting: {
    pdfFont: {
        normal: 'https://www.highcharts.com/samples/data/fonts/NotoSans-Regular.ttf',
        bold: 'https://www.highcharts.com/samples/data/fonts/NotoSans-Bold.ttf',
        bolditalic: 'https://www.highcharts.com/samples/data/fonts/NotoSans-BoldItalic.ttf',
        italic: 'https://www.highcharts.com/samples/data/fonts/NotoSans-Italic.ttf'
    }
}

在 jsFiddle 上实时查看

相关推荐
瑞瑞小同学4 小时前
处理echarts x轴内容过多,重叠问题
前端·javascript·echarts
HexCIer4 小时前
面向未来的原子化 CSS:UnoCSS 核心架构分析与 Tailwind CSS 现状
前端·css·vite
程序员黑豆4 小时前
鸿蒙应用开发中的单位详解:px、vp、fp、lpx
前端·harmonyos
像我这样帅的人丶你还5 小时前
MCP + npm:给五年前的老系统接上AI
前端·javascript·agent
南一Nanyi5 小时前
依赖注入和控制反转
前端·设计模式·nestjs
小村儿5 小时前
连载14-实战篇--一个半月,我一个人和 Claude Code 搭出一套数字人工程
前端·后端·ai编程
愚公移码5 小时前
蓝凌EKP18产品:流程虚拟机(PVM)
java·开发语言·前端
promiseThen5 小时前
5 分钟上手 Markdown:标题到表格、代码块与简历实战
前端
web66liang6 小时前
webpack4+vue2项目使用 sass-embedded 导致的 DockerfIle 构建失败的问题
前端
Strayer6 小时前
拓扑管网 3D 可视化大屏demo:科技感(地图 + 拓扑 + 3D 空间)
前端·three.js·数据可视化