forked from go/golangs_learn
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.
76 lines
1.7 KiB
76 lines
1.7 KiB
3 years ago
|
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
|
||
|
}
|
||
|
}
|