<center><font size="5">golang + libreoffice6.2 实现 word,excel,pptx 转pdf/html</font></center>
-
方法[^本地需安装libreoffice]
/** *@tips libreoffice 转换指令: * libreoffice6.2 invisible --convert-to pdf csDoc.doc --outdir /home/[转出目录] * * @function 实现文档类型转换为pdf或html * @param command:libreofficed的命令(具体以版本为准);win:soffice; linux:libreoffice6.2 * fileSrcPath:转换文件的路径 * fileOutDir:转换后文件存储目录 * converterType:转换的类型pdf/html * @return fileOutPath 转换成功生成的文件的路径 error 转换错误 */ func FuncDocs2Pdf(command string, fileSrcPath string, fileOutDir string, converterType string) (fileOutPath string, error error) { //校验fileSrcPath srcFile, erByOpenSrcFile := os.Open(fileSrcPath) if erByOpenSrcFile != nil && os.IsNotExist(erByOpenSrcFile) { return "", erByOpenSrcFile } //如文件输出目录fileOutDir不存在则自动创建 outFileDir, erByOpenFileOutDir := os.Open(fileOutDir) if erByOpenFileOutDir != nil && os.IsNotExist(erByOpenFileOutDir) { erByCreateFileOutDir := os.MkdirAll(fileOutDir, os.ModePerm) if erByCreateFileOutDir != nil { logs.Error("File ouput dir create error.....", erByCreateFileOutDir.Error()) return "", erByCreateFileOutDir } } //关闭流 defer func() { _ = srcFile.Close() _ = outFileDir.Close() }() //convert cmd := exec.Command(command, "--invisible", "--convert-to", converterType, fileSrcPath, "--outdir", fileOutDir) byteByStat, errByCmdStart := cmd.Output() //命令调用转换失败 if errByCmdStart != nil { return "", errByCmdStart } //success fileOutPath = fileOutDir + "/" + strings.Split(path.Base(fileSrcPath), ".")[0] if converterType == "html" { fileOutPath += ".html" } else { fileOutPath += ".pdf" } logs.Info("文件转换成功...", string(byteByStat)) return fileOutPath, nil }
有疑问加站长微信联系(非本文作者)