智能多媒体服务

  • 智能多媒体 > API 文档 > 文档处理 >文档转换

    文档转换

    最近更新时间:2021-11-18 18:04:10

    接口简介

    文档转换用于实时将存储在七牛的word(docx, doc)、excel(xlsx, xls)、ppt(pptx)格式的文档转成pdf,支持在浏览器预览,或者存储在七牛云的云存储中

    注意

    • 该功能目前支持预览的文件格式有word(docx, doc)、excel(xlsx, xls)、ppt(pptx)等
    • 该功能目前支持 华东、华南、华北、华东-浙江2 区域的存储 bucket

    命令规格

    注意:接口规格不含任何空格与换行符,下列内容经过格式化以便阅读。

    doc-convert/preview
    

    使用方式

    • 可以将word(docx, doc)、excel(xlsx, xls)、ppt(pptx)转成pdf。
    • 通过fop同步处理 的方式来调用。可以将文档以pdf方式在浏览器预览。
    • 通过pfop持久化处理的方式来调用。可以实现将转换后的pdf存储到kodo对象存储的功能。

    fop同步处理示例

    将word文档转为pdf并进行预览:

    第一步

    获取文件链接,例如http://r2rfna9gj.hn-bkt.clouddn.com/docx-test.docx

    第二步

    在您的文件链接后加上doc-convert/preview,例如

    http://r2rfna9gj.hn-bkt.clouddn.com/docx-test.docx?doc-convert/preview
    

    预览是大多数浏览器针对pdf默认的行为。如果浏览器针对pdf的设定为下载,那么此处表现的行为将会是下载。

    pfop持久化处理示例

    通过pfop操作,可以实现将转换后的pdf存储到kodo对象存储的功能。具体pfop文档请点击:pfop持久化处理,将其中fops参数的命令填为doc-convert/preview即可

    pfop实现pdf转kodo存储代码示例(go语言描述):

    
    package main
    
    import (
    	"encoding/base64"
    	"fmt"
    	"io/ioutil"
    	"log"
    	"net/http"
    	"net/url"
    	"strings"
    	"testing"
    
    	"github.com/lzw5399/qauth"
    )
    
    var (
    	pfopEndpoint = "http://api.qiniu.com/pfop/" // pfop固定的接口endpoint
    
    	ak = "" // todo 填写七牛的accessKey
    	sk = "" // todo 填写七牛的secretKey
    
    	sourceBucket  = "huabei-lemon"   // todo 源文件bucket
    	sourceFileKey = "doc-test.doc"   // todo 源文件fileKey
    	pdfBucket     = "huabei-lemon"   // todo 转换后的pdf文件要存的bucket
    	pdfFileKey    = "pdf-test-1.pdf" // todo 转换后的pdf文件要存的fileKey
    )
    
    // 测试转pdf的pfop操作
    func TestDocConvertPdfPfop(t *testing.T) {
    	// 组装pfop操作的参数
    	saveas := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", pdfBucket, pdfFileKey))) // 对 pdfBucket:pdfFileKey 进行base64编码
    	fops := fmt.Sprintf("doc-convert/preview|saveas/%s", saveas)                                     // 此处指定走文档转换,固定的
    
    	// 组装请求体 详细参数见https://developer.qiniu.com/dora/1291/persistent-data-processing-pfop
    	u := url.Values{}
    	u.Set("bucket", url.QueryEscape(sourceBucket)) // 源文件的bucket, 必选,需要进行url encode
    	u.Set("key", url.QueryEscape(sourceFileKey))   // 源文件的file key, 必选,需要进行url encode
    	u.Set("fops", fops)                            // 执行的pfop操作,此处为转换成pdf
    
    	u.Set("notifyURL", "http://61cf-103-119-224-183.ngrok.io/common-callback") // 回调的url, 可以为空。
    	u.Set("force", "")                                                         // 如果转换的文件已存在,值为1会替换。可为空,为空会跳过
    	u.Set("pipeline", "")                                                      // pipeline。可为空,为空使用默认管道
    
    	httpReq, err := http.NewRequest(
    		http.MethodPost,
    		pfopEndpoint,
    		strings.NewReader(u.Encode()))
    	if err != nil {
    		log.Fatalf("new req fail: %s \n", err)
    	}
    
    	httpReq.Header.Set("Content-Type", "application/x-www-form-urlencoded")
    
    	// 进行七牛的通用签名,文档请戳: https://developer.qiniu.com/kodo/manual/access-token
    	// 返回: Qiniu <AccessToken>
    	authHeader := signPfop(httpReq)
    	httpReq.Header.Set("Authorization", authHeader)
    
    	// 发起请求
    	client := &http.Client{}
    	resp, err := client.Do(httpReq)
    	if err != nil {
    		log.Fatalf("do req fail: %s \n", err)
    	}
    	defer resp.Body.Close()
    
    	r, _ := ioutil.ReadAll(resp.Body)
    	fmt.Println(string(r))
    }
    
    func signPfop(req *http.Request) string {
    	to, err := qauth.SignRequest([]byte(sk), req)
    	if err != nil {
    		log.Fatalf("new token fail: %s \n", err)
    	}
    	token := fmt.Sprintf("%s:%s", ak, base64.URLEncoding.EncodeToString(to))
    
    	return "Qiniu " + string(token)
    }
    
    以上内容是否对您有帮助?
  • Qvm free helper
    Close