一、标题中文
grafana-reporter安装过程,看前面教程吧,标题中文我修改了go调用的命令latex为xelatex,原因是latex需要安装ctex模块调用中文始终无法成功;修改为xelatex后,使用xeCJK模块成功导出中文标题。
注意:使用此方法需要安装xelatex和xeCJK的模块
- 修改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 }
- 修改github.com/IzakMarais/reporter/report/texTemplate.go
在const defaultTemplate中新增两行
\usepackage{xeCJK}
\setCJKmonofont{KaiTi}
二、点击下载中文
默认点击下载是unicode码文件名称,比如u4e2du6587u6d4bu8bd5DNS.pdf,不太方便。
- 修改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函数如下: