grafana-reporter导出中文图表(修改go源码)

2023-11-28 10:48

本文主要是介绍grafana-reporter导出中文图表(修改go源码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、标题中文

grafana-reporter安装过程,看前面教程吧,标题中文我修改了go调用的命令latex为xelatex,原因是latex需要安装ctex模块调用中文始终无法成功;修改为xelatex后,使用xeCJK模块成功导出中文标题。

注意:使用此方法需要安装xelatex和xeCJK的模块

  1. 修改github.com/IzakMarais/reporter/report/report.go文件
    225行和234行内容,把pdflatex换成xelatex
224 func (rep *report) runLaTeX() (pdf *os.File, err error) {
225         //cmdPre := exec.Command("pdflatex", "-halt-on-error", "-draftmode", reportTexFile)
226         cmdPre := exec.Command("xelatex", "-halt-on-error", reportTexFile)
227         cmdPre.Dir = rep.tmpDir
228         outBytesPre, errPre := cmdPre.CombinedOutput()
229         log.Println("Calling LaTeX - preprocessing")
230         if errPre != nil {
231                 err = fmt.Errorf("error calling LaTeX preprocessing: %q. Latex preprocessing failed with output: %    s ", errPre, string(outBytesPre))
232                 return
233         }
234         //cmd := exec.Command("pdflatex", "-halt-on-error", reportTexFile)
235         cmd := exec.Command("xelatex", "-halt-on-error", reportTexFile)
236         cmd.Dir = rep.tmpDir
237         outBytes, err := cmd.CombinedOutput()
238         log.Println("Calling LaTeX and building PDF")
239         if err != nil {
240                 err = fmt.Errorf("error calling LaTeX: %q. Latex failed with output: %s ", err, string(outBytes))
241                 return
242         }
243         pdf, err = os.Open(rep.pdfPath())
244         return
245 }
  1. 修改github.com/IzakMarais/reporter/report/texTemplate.go
    在const defaultTemplate中新增两行
    \usepackage{xeCJK}
    \setCJKmonofont{KaiTi}
    在这里插入图片描述

二、点击下载中文

默认点击下载是unicode码文件名称,比如u4e2du6587u6d4bu8bd5DNS.pdf,不太方便。

  1. 修改github.com/IzakMarais/reporter/cmd/grafana-reporter/handler.go
    引用bytes模块,新增函数conv_str,修改addFilenameHeader函数

conv_str函数如下:

func conv_str(filename string)string {buf := bytes.NewBuffer(nil)i, j := 0, len(filename)for i < j {x := i + 6if x > j {buf.WriteString(filename[i:])break}if filename[i] == '\\' && filename[i+1] == 'u' {hex := filename[i+2 : x]//fmt.Println(hex)r, err := strconv.ParseUint(hex, 16, 64)if err == nil {//fmt.Println(string(r))buf.WriteRune(rune(r))} else {buf.WriteString(filename[i:x])}i = x} else {buf.WriteByte(filename[i])i++}}//fmt.Println(buf.String())return buf.String()
}

修改addFilenameHeader函数如下:
在这里插入图片描述

这篇关于grafana-reporter导出中文图表(修改go源码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/429579

相关文章

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文