You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

75 lines
1.7 KiB

package main
import (
"bytes"
"log"
"os"
"os/exec"
"runtime"
)
func main() {
s, t := "E://Result_53.xlsx", "E://Result_53.pdf"
b, _ := PathExists(s)
if b {
ConvertToPDF(s, t)
}
}
//
// 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
}
}