当前位置: 首页 > article >正文

go libreoffice word 转pdf

一、main.go 关键代码

完整代码

 

package main

import (
	"fmt"
	"github.com/jmoiron/sqlx"
	"github.com/tealeg/xlsx"
	"log"
	"os/exec"
	"path/filepath"
)
import _ "github.com/go-sql-driver/mysql"

import "net/http"
import "encoding/json"
import "io/ioutil"
import "github.com/google/uuid"

type Student struct {
	Name string
	Sex  string
}

type ResponseData struct {
	Status  string `json:"status"`
	Message string `json:"message"`
}

func (student Student) show() {
	fmt.Printf("Name:%s Sex:%s\r\n", student.Name, student.Sex)
}
func uploadFile(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json")
	r.ParseMultipartForm(32 << 20) // 设置最大内存为32MB
	file, handler, err := r.FormFile("file")
	if err != nil {
		http.Error(w, err.Error(), http.StatusBadRequest)
		return
	}
	defer file.Close()

	data, err := ioutil.ReadAll(file)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	ext := filepath.Ext(handler.Filename)
	// 这里可以将文件数据保存到服务器
	err2 := ioutil.WriteFile(uuid.NewString()+ext, data, 0644)
	if err2 != nil {
		return
	}

	response := ResponseData{
		Status:  "success",
		Message: "Hello, this is a JSON response",
	}
	jsonResponse, err3 := json.Marshal(response)
	if err3 != nil {
		http.Error(w, err3.Error(), http.StatusInternalServerError)
		return
	}
	w.Write(jsonResponse)
}

func convertToPDF(inputFile, outputFile string) {
	cmd := exec.Command("libreoffice", "--headless", "--convert-to", "pdf", inputFile, "--outdir", outputFile)
	err := cmd.Run()
	if err != nil {
		log.Fatal("转换失败:", err)
	}
	log.Println("转换成功!")
}

func main() {

	inputFile := "/root/doc1.docx"
	outputFile := "/root/output/"
	convertToPDF(inputFile, outputFile)

	http.HandleFunc("/upload", uploadFile)
	http.ListenAndServe("0.0.0.0:5000", nil)
}
func saveexcel() {
	excelPath := "students.xlsx"
	xlFile, err := xlsx.OpenFile(excelPath)
	if err != nil {
		fmt.Printf("Error opening Excel file: %s\n", err)
		return
	}
	sheet := xlFile.Sheets[0]
	var students []Student
	i := 0
	for _, row := range sheet.Rows {
		name := row.Cells[0].String()
		sex := row.Cells[1].String()
		fmt.Printf("name:%s sex:%s \r\n", name, sex)
		students = append(students, Student{Name: name, Sex: sex})
		i++
	}
	for _, student := range students {
		student.show()
	}

	fmt.Println("数据库操作")
	dsn := "root:123456@tcp(192.168.31.132:3306)/demo"
	db, err := sqlx.Open("mysql", dsn)
	if err != nil {
		log.Fatal(err)
	}

	for i, student := range students {
		if i == 0 {
			continue
		}
		db.NamedExec("insert into students(Name,Sex) values(:name,:sex)", student)
	}

	var studentMaps []*Student
	err = db.Select(&studentMaps, `select name,sex from students where name=?`, "张三")
	if err != nil {
		log.Fatal(err)
	}
	for _, student := range studentMaps {
		student.show()
	}
}

二、运行效果:


http://www.kler.cn/a/315879.html

相关文章:

  • element plus的表格内容自动滚动
  • 【Zabbix自动化运维监控系列】判断zabbix是主动监控,还是被动监控
  • golang使用etcd版本问题
  • 开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-tool usage入门-集成心知天气(二)
  • 【C++学习(37)】并发性模式:如生产者-消费者、读写锁等。 架构模式:如MVC、MVVM等。属于23 种设计模式吗? RAII 的关系?
  • 论文翻译 | The Capacity for Moral Self-Correction in Large Language Models
  • 耦合微带线单元的网络参量和等效电路公式推导
  • C++在线开发服务器环境搭建
  • 记一次docker打包部署历程
  • openeuler 22.03 lts sp4 使用 kubeadm 部署 k8s-v1.28.2 高可用集群
  • Linux下实现ls命令的功能
  • 【C++】—— stack queue deque
  • 数据库三范式和ER图详解
  • 一种新的电子邮件攻击方式:AiTM
  • 【有啥问啥】探索累计推理(Cumulative Reasoning, CR)——大型语言模型中的复杂推理新框架
  • 音视频入门基础:AAC专题(9)——FFmpeg源码中计算AAC裸流每个packet的duration和duration_time的实现
  • 详解 FFmpeg 中的 -map 选项
  • Qt-QLineEdit输入类控件(29)
  • 【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】011 - 第一个用户空间进程 init 进程 第一阶段初始化过程 源码分析
  • poi生成的ppt,powerPoint打开提示内容错误解决方案
  • 论文阅读:A Generalization of Transformer Networks to Graphs
  • [JavaEE] 网络初识(网络通信 及 TCP / UDP / IP 封装分用 )
  • 强大的重命名工具 | Bulk Rename Utility v4.0 便携版
  • 【Linux】入门【更详细,带实操】
  • flask + vue
  • CCF CSP题解:字符串变换(str)(202409-2)