LibreOffice lowriter命令终端可执行,代码调用失败排查
解决Go调用lowriter转换DOCX到PDF失败的问题
问题根源
你的代码核心错误是错误使用了exec.Command:你将整个命令拼接成单个字符串传给exec.Command,但该函数的第一个参数是程序名,后续每个参数需要单独传入,不能合并成一个字符串。系统会把你传入的整个长字符串当成要执行的程序文件名,自然会报"no such file or directory"。
修正后的代码
直接拆分每个命令行参数,单独传递给exec.Command:
func DocxToPdf(srcDocxPath string, outputPath string) error{ cmd := exec.Command( "lowriter", "--invisible", "--headless", "--convert-to", "pdf:writer_pdf_Export", "--outdir", outputPath, srcDocxPath, ) _, err := cmd.Output() if err != nil { return err } return nil }
补充说明
- 参数拆分规则:命令行中每个空格分隔的部分都要作为独立参数传入
exec.Command,比如--outdir和输出路径是两个独立参数,不能合并成"--outdir /path"。 - 路径检查:你之前的路径替换逻辑(
strings.Replace加fmt.Sprintf)其实没必要,直接使用原始路径即可,避免引入额外的路径错误。 - 环境变量验证:确保Go进程的
PATH环境变量包含lowriter的路径,若不确定,直接使用lowriter的绝对路径(比如/usr/bin/lowriter)替换第一个参数。
内容的提问来源于stack exchange,提问作者rminaj
相关产品推荐
相关产品推荐

