package ppt
import (
"archive/zip"
"bytes"
_ "embed"
"fmt"
"io"
"strings"
)
// Office Open XML (OOXML) http://officeopenxml.com/prPresentation.php
//go:embed template.pptx
var pptx_template []byte
func copyPptxTemplateTo(w *zip.Writer) error {
reader := bytes.NewReader(pptx_template)
zipReader, err := zip.NewReader(reader, reader.Size())
if err != nil {
fmt.Printf("%v", err)
}
for _, f := range zipReader.File {
fw, err := w.Create(f.Name)
if err != nil {
return err
}
fr, err := f.Open()
if err != nil {
return err
}
_, err = io.Copy(fw, fr)
if err != nil {
return err
}
}
return nil
}
func addFile(zipFile *zip.Writer, filePath, content string) error {
w, err := zipFile.Create(filePath)
if err != nil {
return err
}
w.Write([]byte(content))
return nil
}
// https://startbigthinksmall.wordpress.com/2010/01/04/points-inches-and-emus-measuring-units-in-office-open-xml/
const SLIDE_WIDTH = 9144000
const SLIDE_HEIGHT = 5143500
const RELS_SLIDE_XML = ``
func getRelsSlideXml(imageId string) string {
return fmt.Sprintf(RELS_SLIDE_XML, imageId, imageId)
}
const SLIDE_XML = ``
func getSlideXml(imageId, imageName string, top, left, width, height int) string {
return fmt.Sprintf(SLIDE_XML, imageName, imageName, imageId, left, top, width, height)
}
func getPresentationXmlRels(slideFileNames []string) string {
var builder strings.Builder
builder.WriteString(``)
for _, name := range slideFileNames {
builder.WriteString(fmt.Sprintf(
``, name, name,
))
}
builder.WriteString("")
return builder.String()
}
func getContentTypesXml(slideFileNames []string) string {
var builder strings.Builder
builder.WriteString(``)
for _, name := range slideFileNames {
builder.WriteString(fmt.Sprintf(
``, name,
))
}
builder.WriteString(``)
return builder.String()
}
func getPresentationXml(slideFileNames []string) string {
var builder strings.Builder
builder.WriteString(``)
builder.WriteString("")
for i, name := range slideFileNames {
builder.WriteString(fmt.Sprintf(``, i, name))
}
builder.WriteString("")
builder.WriteString(fmt.Sprintf(
``,
SLIDE_WIDTH,
SLIDE_HEIGHT,
))
return builder.String()
}