Golang | Docx编辑 | 解决unioffice/gooxml没有背景颜色(底纹颜色)方法问题

收费(功能全)

github.com/unidoc/unioffice

免费(不维护,基本够用)

github.com/carmel/gooxml

导入包

go get github.com/carmel/gooxml

基本使用

package main

import (
	"github.com/carmel/gooxml/color"
	"github.com/carmel/gooxml/document"
	"github.com/carmel/gooxml/measurement"
	"github.com/carmel/gooxml/schema/soo/wml"
)

func main() {
    doc := document.New()
    para := docc.AddParagraph()

		
    para.Properties().SetAlignment(wml.ST_JcLeft)                // 对齐
    para.Properties().SetFirstLineIndent(0.5 * measurement.Inch) // 缩进
    para.Properties().Spacing().SetLineSpacing(1.5 * 12 * measurement.Point, wml.ST_LineSpacingRuleAuto)                                  // 行高

    run := para.AddRun()                          // 创建一个新段
    run.AddText(text.Content)                     // 增加文字
    run.Properties().SetSize(10)                  // 字体大小
    run.Properties().SetColor(color.RGB(0, 0, 0)) // 字体颜色
    run.Properties().SetBold(true)                // 加粗
    run.Properties().SetHighlight(color.Red)      // 突出显示
    run.Properties().SetStrikeThrough(true)       // 删线
    run.Properties().SetUnderline(wml.ST_UnderlineWavyHeavy, color.Black) // 下划线
    run.Properties().SetItalic(true)              // 斜体
    run.Properties().SetFontFamily("黑体")        // 字体



    // 第三方库没有底纹颜色方法,自定义
    SetShading(run, color.RGB(0, 0, 0)) // 底纹颜色
	if err := doc.SaveToFile(path); err != nil {
        fmt.Println(err)
        return
    }
}

func SetShading(run document.Run, color color.Color) {
	shd := wml.NewCT_Shd()
	shd.FillAttr = &wml.ST_HexColor{
		ST_HexColorRGB: color.AsRGBAString(),
	}
	shd.ValAttr = wml.ST_ShdClear
	run.X().RPr.Shd = shd
}

Golang中使用carmel/gooxml库来创建并操作Word文档(`.docx`),如需设置特定的页面宽度和高度(通常用于A4纸规格,即210mm x 297mm),首先确保已包含必要的依赖包,然后你可以按照以下步骤操作: 1. 导入所需的包: ```go import ( "github.com/carmel/gooxml" "github.com/carmel/gooxml/drawing" "github.com/carmel/gooxml/styles" ) ``` 2. 创建一个新的Word文档: ```go doc := gooxml.NewDoc() section := doc.AddSection() body := section.Body ``` 3. 添加页眉和页脚(如果需要): ```go headerFooter := body.AddHeaderFooter(gooxml.HeaderFooterTypeFirstPage) footer := headerFooter.AddFooter() ``` 4. 设置页面大小。GooXML库并不直接提供设置页面大小的方法,但我们可以通过插入一个绘图对象(`DrawingML`)来间接实现。先添加一个`Picture`元素,然后设置其尺寸: ```go pic := drawing.AddPicture(body, "your-image-source.jpg") // 将"your-image-source.jpg"替换为你要设置的图片源 imgWidth, imgHeight := 210*mmToEMU(), 297*mmToEMU() // mmToEMU将毫米转换为EMU (Microsoft Equation Metric Units) pic.SetDimensions(imgWidth, imgHeight) ``` 5. 其中,`mmToEMU`函数是一个自定义的转换函数,将毫米转换为Equation Metrics Unit(EMU)。示例实现: ```go func mmToEMU(mm float64) int { return int(float64(emuPerMM) * mm) // emuPerMM可以根据实际情况计算,通常是14400 emuPerMM := 14400.0 } ``` 6. 最后记得保存文档: ```go err := doc.Save("output.docx") if err != nil { // 处理错误 } ``` 注意,上述操作并不能保证文档的打印尺寸就是210mm x 297mm,因为Word文档在打印时会自动调整以适应纸张边界。然而,这可以在一定程度上影响用户的视觉体验。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值