美文网首页Golang语言知识库
知识分享之Golang——一个常见word、excel转换pdf

知识分享之Golang——一个常见word、excel转换pdf

作者: cn華少 | 来源:发表于2022-03-23 21:54 被阅读0次

    知识分享之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
        }
    }
    

    以上就是本节的干货,有需要的小伙伴可以直接使用,更多知识欢迎持续关注。

    本文声明:
    88x31.png
    知识共享许可协议
    本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

    相关文章

      网友评论

        本文标题:知识分享之Golang——一个常见word、excel转换pdf

        本文链接:https://www.haomeiwen.com/subject/meuhjrtx.html