知识分享之Golang——一个常见word、excel转换pdf的工具函数
背景
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。
知识分享系列目前包含Java、Golang、Linux、Docker等等。
开发环境
- 系统:windows10
- 语言:Golang
- golang版本:1.18
内容
本节我们进行分享一个常见word、excel格式转换pdf的工具函数,本函数参考开源代码,使用的核心组件是libreoffice,需要在其运行的windows环境或Linux环境下安装libreoffice方可使用该工具函数进行转换。
//
// ConvertToPDF
// @Description: 转换文件为pdf
// @param filePath 需要转换的文件
// @param outPath 转换后的PDF文件存放目录
// @return string
//
func ConvertToPDF(filePath string, outPath string) bool {
// 1、拼接执行转换的命令
commandName := ""
var params []string
if runtime.GOOS == "windows" {
commandName = "cmd"
params = []string{"/c", "soffice", "--headless", "--invisible", "--convert-to", "pdf", filePath, "--outdir", outPath}
} else if runtime.GOOS == "linux" {
commandName = "libreoffice"
params = []string{"--invisible", "--headless", "--convert-to", "pdf", filePath, "--outdir", outPath}
}
// 开始执行转换
if _, ok := interactiveToexec(commandName, params); ok {
return true
} else {
return false
}
}
func PathExists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return false, err
}
//
// interactiveToexec
// @Description: 执行指定命令
// @param commandName 命令名称
// @param params 命令参数
// @return string 执行结果返回信息
// @return bool 是否执行成功
//
func interactiveToexec(commandName string, params []string) (string, bool) {
cmd := exec.Command(commandName, params...)
buf, err := cmd.Output()
w := bytes.NewBuffer(nil)
cmd.Stderr = w
if err != nil {
log.Println("Error: <", err, "> when exec command read out buffer")
return "", false
} else {
return string(buf), true
}
}
以上就是本节的干货,有需要的小伙伴可以直接使用,更多知识欢迎持续关注。
本文声明:
知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。