纯Go语言实现的PowerPoint演示文稿生成库,支持创建符合OOXML (ECMA-376)标准的.pptx文件。
- ✅ 纯Go实现 - 无第三方依赖,仅使用标准库
- ✅ 文本支持 - 多种字体、颜色、对齐方式
- ✅ 形状支持 - 矩形、圆形、箭头等多种形状
- ✅ 表格支持 - 完整的表格功能,支持合并单元格
- ✅ 图片支持 - PNG、JPEG、GIF等格式,支持本地文件、URL、Base64
- ✅ 图表支持 - 柱状图、折线图、饼图、环形图、面积图
- ✅ 视频支持 - MP4、MOV、AVI等格式
- ✅ 音频支持 - MP3、WAV、M4A等格式,支持背景音乐
- ✅ Markdown支持 - 从Markdown直接生成PPT
- ✅ HTML支持 - 从HTML直接生成PPT
- ✅ 多种导出 - 文件、字节数组、io.Writer
go get github.com/CoolBanHub/genpptpackage main
import (
"github.com/CoolBanHub/genppt"
)
func main() {
// 1. 创建演示文稿
pres := genppt.New()
pres.SetTitle("我的演示文稿")
// 2. 添加幻灯片
slide := pres.AddSlide()
// 3. 添加文本
slide.AddText("Hello World!", genppt.TextOptions{
X: 1.0,
Y: 1.0,
Width: 8.0,
Height: 1.0,
FontSize: 24,
FontColor: "#363636",
Bold: true,
Align: genppt.AlignCenter,
})
// 4. 保存文件
pres.WriteFile("output.pptx")
}// 创建演示文稿
pres := genppt.New()
// 设置属性
pres.SetTitle("标题")
pres.SetAuthor("作者")
pres.SetSubject("主题")
pres.SetCompany("公司")
// 设置幻灯片尺寸
pres.SetSlideSize16x9() // 16:9 宽屏(默认)
pres.SetSlideSize4x3() // 4:3 标准
pres.SetSlideSize(10, 7.5) // 自定义尺寸(英寸)
// 添加幻灯片
slide := pres.AddSlide()
// 导出
pres.WriteFile("output.pptx") // 保存到文件
data, _ := pres.ToBytes() // 转换为字节数组
pres.Write(writer) // 写入io.Writerslide.AddText("文本内容", genppt.TextOptions{
X: 1.0, // X坐标(英寸)
Y: 1.0, // Y坐标(英寸)
Width: 8.0, // 宽度(英寸)
Height: 1.0, // 高度(英寸)
FontFace: "微软雅黑", // 字体
FontSize: 24, // 字号(磅)
FontColor: "#FF0000", // 颜色
Bold: true, // 粗体
Italic: false, // 斜体
Underline: false, // 下划线
Align: genppt.AlignCenter, // 水平对齐
VAlign: genppt.VAlignMiddle, // 垂直对齐
Rotate: 45, // 旋转角度
})// 基本形状
slide.AddShape(genppt.ShapeRect, genppt.ShapeOptions{
X: 1.0,
Y: 1.0,
Width: 2.0,
Height: 1.0,
Fill: "#4472C4",
LineColor: "#2F5496",
LineWidth: 2,
Shadow: true,
Transparency: 20, // 透明度0-100
})
// 带文本的形状
slide.AddShapeWithText(genppt.ShapeEllipse, "文本", genppt.ShapeOptions{...})
// 支持的形状类型
genppt.ShapeRect // 矩形
genppt.ShapeRoundRect // 圆角矩形
genppt.ShapeEllipse // 椭圆
genppt.ShapeTriangle // 三角形
genppt.ShapeDiamond // 菱形
genppt.ShapeArrowRight // 右箭头
genppt.ShapeArrowLeft // 左箭头
genppt.ShapeArrowUp // 上箭头
genppt.ShapeArrowDown // 下箭头
genppt.ShapeStar5 // 五角星
genppt.ShapeHeart // 心形slide.AddTable([][]genppt.TableCell{
{{Text: "标题1", Bold: true}, {Text: "标题2", Bold: true}},
{{Text: "数据1"}, {Text: "数据2"}},
{{Text: "数据3", ColSpan: 2}}, // 合并列
}, genppt.TableOptions{
X: 1.0,
Y: 1.0,
Width: 8.0,
FontSize: 14,
FirstRowBold: true,
FirstRowFill: "#4472C4",
Border: genppt.Border{
Color: "#CCCCCC",
Width: 1.0,
},
})// 从文件添加
slide.AddImage(genppt.ImageOptions{
Path: "/path/to/image.png",
X: 1.0,
Y: 1.0,
Width: 4.0,
Height: 3.0,
})
// 从字节数据添加
slide.AddImage(genppt.ImageOptions{
Data: imageBytes,
X: 1.0,
Y: 1.0,
Width: 4.0,
Height: 3.0,
})slide.SetBackground(genppt.BackgroundOptions{
Color: "#1E3A5F", // 纯色背景
})// 从文件添加音频
slide.AddAudio(genppt.AudioOptions{
Path: "/path/to/audio.mp3",
X: 1.0,
Y: 1.0,
Width: 0.5, // 音频图标大小
Height: 0.5,
AutoPlay: true, // 自动播放
Loop: true, // 循环播放
})
// 背景音乐(隐藏图标)
slide.AddAudio(genppt.AudioOptions{
Path: "/path/to/bgm.mp3",
X: 0,
Y: 0,
Hidden: true, // 隐藏音频图标
AutoPlay: true,
Loop: true,
})
// 从字节数据添加
slide.AddAudio(genppt.AudioOptions{
Data: audioBytes,
X: 1.0,
Y: 1.0,
AutoPlay: false,
})支持的音频格式: MP3, WAV, WMA, M4A, AAC, OGG, FLAC
GenPPT 支持从 Markdown 直接生成 PPT!
markdown := `# 第一张幻灯片
这是内容。
# 第二张幻灯片
- 列表项1
- 列表项2
`
pres := genppt.FromMarkdown(markdown)
pres.WriteFile("output.pptx")| 格式 | 效果 |
|---|---|
# 标题 |
创建新幻灯片 |
## 子标题 |
幻灯片标题 |
- 列表 |
无序列表 |
1. 列表 |
有序列表 |
``` |
代码块 |
--- |
分隔符(新幻灯片) |
opts := genppt.DefaultMarkdownOptions()
opts.TitleFontSize = 48
opts.HeadingColor = "#FFFFFF"
opts.BodyColor = "#E0E0E0"
opts.SlideBackground = "#1A1A2E"
opts.CodeBackground = "#16213E"
pres := genppt.FromMarkdownWithOptions(markdown, opts)pres, err := genppt.FromMarkdownFile("presentation.md")
if err != nil {
log.Fatal(err)
}
pres.WriteFile("output.pptx")GenPPT 支持从 HTML 直接生成 PPT!
html := `
<h1>第一张幻灯片</h1>
<p>这是内容。</p>
<h1>第二张幻灯片</h1>
<ul>
<li>列表项1</li>
<li>列表项2</li>
</ul>
`
pres := genppt.FromHTML(html)
pres.WriteFile("output.pptx")| 元素 | 效果 |
|---|---|
<h1> |
创建新幻灯片 |
<h2>-<h6> |
内容标题 |
<p> |
普通文本 |
<ul>/<ol>/<li> |
列表项 |
<pre>/<code> |
代码块 |
<table> |
表格 |
<img> |
图片(支持本地路径、URL、Base64) |
<hr>/<section> |
分隔符(新幻灯片) |
<!-- 本地文件 -->
<img src="./image.png">
<!-- URL下载 -->
<img src="https://example.com/image.png">
<!-- Base64 -->
<img src="data:image/png;base64,iVBORw0KGgo...">opts := genppt.DefaultHTMLOptions()
opts.TitleFontSize = 48
opts.HeadingColor = "#FFFFFF"
opts.BodyColor = "#E0E0E0"
opts.SlideBackground = "#1A1A2E"
pres := genppt.FromHTMLWithOptions(html, opts)pres, err := genppt.FromHTMLFile("presentation.html")
if err != nil {
log.Fatal(err)
}
pres.WriteFile("output.pptx")cd examples/basic
go run main.gogo test -v ./...MIT License