前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ONLYOFFICE文档转换开发技术

ONLYOFFICE文档转换开发技术

作者头像
hotqin888
发布2019-08-14 16:55:30
2.2K0
发布2019-08-14 16:55:30
举报
文章被收录于专栏:hotqin888的专栏hotqin888的专栏

onlyoffice具有文档转换的功能,就是你给一个文档的地址,以及一些参数,post给document server,它会转换成你要的,然后返回一个文件地址,你收到这个地址,把文件下载下来保存,提供用户下载。

它官网也讲的比较清楚,这个没有历史版本难度大,最新的API里说可以支持返回json格式,前提是post发生参数的时候,要设定head参数,可惜beego没有试验成功,反正xml用golang也可以很方便解析出struct,不去折腾了。

测试代码如下:

代码语言:javascript
复制
//文档格式转换
type Conversionsend struct {
	Async      bool   `json:"async"`
	Filetype   string `json:"filetype"`
	Key        string `json:"key"`
	Outputtype string `json:"async"`
	Thumbnail  Nail   `json:"thumbnail"`
	Title      string `json:"title"`
	Url        string `json:"url"`
}

type Nail struct {
	Aspect int  `json:"aspect"`
	First  bool `json:"first"`
	Height int  `json:"height"`
	Width  int  `json:"width"`
}
type Conversionresponse struct {
	EndConvert bool   `json:"endconvert"`
	FileUrl    string `json:"fileurl"`
	Percent    int    `json:"percent"`
}

// @Title post conversion doc
// @Description post doc to onlyoffice conversion
// @Success 200 {object} models.AddArticle
// @Failure 400 Invalid page supplied
// @Failure 404 articl not found
// @router /conversion [post]
func (c *OnlyController) Conversion() {
var nail Nail
	nail.Aspect = 0
	nail.First = true
	nail.Height = 850
	nail.Width = 600
	var conversionsend Conversionsend
	conversionsend.Async = false
	conversionsend.Filetype = "docx"
	conversionsend.Key = "Khirz6zTPdfd7"
	conversionsend.Outputtype = "pdf"
	conversionsend.Thumbnail = nail
	conversionsend.Title = "Example Document Title.docx"
	conversionsend.Url = "http://192.168.99.1/attachment/onlyoffice/111历史版本试验v4.docx"

	req := httplib.Post("http://192.168.99.100:9000/convertservice.ashx")
	// req.Header("contentType", "application/json")
	req.Header("Content-Type", "application/json")
	// 	bt,err:=ioutil.ReadFile("hello.txt")
	// if err!=nil{
	//     log.Fatal("read file err:",err)
	// }
	beego.Info(conversionsend)
	b, err := json.Marshal(conversionsend)
	req.Body(string(b))
	beego.Info(string(b))
	var conversionresponse Conversionresponse

	jsonstring, err := req.String()
	if err != nil {
		beego.Error(err)
	} else {
		//json字符串解析到结构体,以便进行追加
		beego.Info(jsonstring)
		// err = json.Unmarshal([]byte(jsonstring), &conversionresponse)
		err = xml.Unmarshal([]byte(jsonstring), &conversionresponse)
		// 	fmt.Println(s)
		if err != nil {
			beego.Error(err)
		}

		resp, err := http.Get(conversionresponse.FileUrl)
		if err != nil {
			beego.Error(err)
		}
		beego.Info(resp)
		body, err := ioutil.ReadAll(resp.Body)
		if err != nil {
			beego.Error(err)
		}
		defer resp.Body.Close()
		if err != nil {
			beego.Error(err)
		}
		f, err := os.Create("./attachment/onlyoffice/" + "Example Document Title.pdf")
		if err != nil {
			beego.Error(err)
		}
		defer f.Close()
		_, err = f.Write(body)
		// _, err = f.WriteString(str)
		// _, err = io.Copy(body, f)
		if err != nil {
			beego.Error(err)
		}
		filePath := "attachment/onlyoffice/Example Document Title.pdf"
		c.Ctx.Output.Download(filePath) //这个能保证下载文件名称正确
		c.Data["json"] = conversionresponse
		c.ServeJSON()
	}
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年08月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档