对于存在数据库表中的html内容,在页面上解析很多支持的前端,小程序端也有专门的解析。可导出到word,不用前端怎么弄?

我用goquery+github.com/unidoc/unioffice来尝试一下。

将engineercms里的日志尝试导出来。

97f6579766e818370efa77a4b6045806.png

设代日志在线查阅:

a0bb66fd7632795a1455f4da657e1acf.png

和导出的word格式对比一下吧:

804acf759bd078bdf58946c0e13685df.png

d02630190627c3da1e1800bb5ac7ffe6.png

思路是这样的,先取出内容,用goquery先分出

然后循环段落,每段后面插入img,只能这样笨办法了。完全嵌入图片,就麻烦点了。

type DiaryContent struct {

Txt string

Html string

}

func (c *DiaryController) HtmlToDoc() {

id := beego.AppConfig.String("wxdiaryprojectid") //"26159" //25002珠三角设代日记id26159

// limit := "10"

limit := c.Input().Get("limit")

limit1, err := strconv.Atoi(limit)

if err != nil {

beego.Error(err)

}

page := c.Input().Get("page")

page1, err := strconv.Atoi(page)

if err != nil {

beego.Error(err)

}

var idNum int64

//id转成64为

idNum, err = strconv.ParseInt(id, 10, 64)

if err != nil {

beego.Error(err)

}

var offset int

if page1 <= 1 {

offset = 0

} else {

offset = (page1 - 1) * limit1

}

// diaries, err := models.GetWxDiaries(idNum, limit1, offset)

diaries, err := models.GetWxDiaries2(idNum, limit1, offset)

if err != nil {

beego.Error(err)

}

doc := document.New()

for _, v := range diaries {

did := v.Diary.Id

// wxsite := beego.AppConfig.String("wxreqeustsite")

Diary, err := models.GetDiary(did)

if err != nil {

beego.Error(err)

}

para := doc.AddParagraph()

run := para.AddRun()

para.SetStyle("Title")

run.AddText(Diary.Title)

para = doc.AddParagraph()

para.SetStyle("Heading1")

run = para.AddRun()

run.AddText(Diary.Diarydate)

//将一篇日志分段,通过

0 {

for _, x := range slice2 {

img1, err := common.ImageFromFile(x.Src)

if err != nil {

log.Fatalf("unable to create image: %s", err)

}

img1ref, err := doc.AddImage(img1)

if err != nil {

log.Fatalf("unable to add image to document: %s", err)

}

para = doc.AddParagraph()

run = para.AddRun()

inl, err := run.AddDrawingInline(img1ref)

if err != nil {

log.Fatalf("unable to add inline image: %s", err)

}

inl.SetSize(5.5*measurement.Inch, 5.5*measurement.Inch)

}

}

}

}

newname := strconv.FormatInt(time.Now().UnixNano(), 10) + ".docx"

doc.SaveToFile("static/" + newname)

c.Data["json"] = map[string]interface{}{"info": "SUCCESS", "filename": newname}

c.ServeJSON()

}