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 + 6
                if 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函数如下:
在这里插入图片描述

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值