머리글 및 바닥글
머리글
doc.Header()를 사용하여 모든 페이지에 반복되는 머리글을 정의합니다:
doc := template.New(
template.WithPageSize(document.A4),
template.WithMargins(document.UniformEdges(document.Mm(20))),
)
doc.Header(func(p *template.PageBuilder) {
p.AutoRow(func(r *template.RowBuilder) {
r.Col(6, func(c *template.ColBuilder) {
c.Text("ACME Corporation", template.Bold(), template.FontSize(10))
})
r.Col(6, func(c *template.ColBuilder) {
c.Text("Confidential Report", template.AlignRight(), template.FontSize(10),
template.TextColor(pdf.Gray(0.5)))
})
})
p.AutoRow(func(r *template.RowBuilder) {
r.Col(12, func(c *template.ColBuilder) {
c.Line(template.LineColor(pdf.RGBHex(0x1565C0)), template.LineThickness(document.Pt(2)))
c.Spacer(document.Mm(5))
})
})
})
바닥글
doc.Footer()를 사용하여 모든 페이지에 반복되는 바닥글을 정의합니다:
doc.Footer(func(p *template.PageBuilder) {
p.AutoRow(func(r *template.RowBuilder) {
r.Col(12, func(c *template.ColBuilder) {
c.Spacer(document.Mm(5))
c.Line(template.LineColor(pdf.Gray(0.7)))
c.Spacer(document.Mm(2))
})
})
p.AutoRow(func(r *template.RowBuilder) {
r.Col(6, func(c *template.ColBuilder) {
c.Text("Generated by gpdf", template.FontSize(8),
template.TextColor(pdf.Gray(0.5)))
})
r.Col(6, func(c *template.ColBuilder) {
c.Text("Confidential", template.FontSize(8),
template.AlignRight(), template.TextColor(pdf.Gray(0.5)))
})
})
})
전체 예제
// Three pages of content — header and footer repeat on each page
for range 3 {
page := doc.AddPage()
page.AutoRow(func(r *template.RowBuilder) {
r.Col(12, func(c *template.ColBuilder) {
c.Text("Main Content Area", template.FontSize(16), template.Bold())
c.Spacer(document.Mm(5))
c.Text("The header and footer repeat on every page automatically.")
})
})
}
┌─ Page 1 ──────────────────────────────────────┐
│ ACME Corporation Confidential Report │ ← 머리글
│ ─────────────────────────────────────────── │
│ │
│ Main Content Area │
│ The header and footer repeat on every page. │
│ │
│ ─────────────────────────────────────────── │
│ Generated by gpdf Confidential│ ← 바닥글
└───────────────────────────────────────────────┘
┌─ Page 2 ──────────────────────────────────────┐
│ ACME Corporation Confidential Report │ ← 동일한 머리글
│ ─────────────────────────────────────────── │
│ │
│ Main Content Area │
│ The header and footer repeat on every page. │
│ │
│ ─────────────────────────────────────────── │
│ Generated by gpdf Confidential│ ← 동일한 바닥글
└───────────────────────────────────────────────┘
페이지 번호
PageNumber()와 TotalPages()를 사용하여 자동 페이지 번호 매기기를 합니다:
// Header with total pages
doc.Header(func(p *template.PageBuilder) {
p.AutoRow(func(r *template.RowBuilder) {
r.Col(6, func(c *template.ColBuilder) {
c.Text("Page Number Demo", template.Bold(), template.FontSize(10))
})
r.Col(6, func(c *template.ColBuilder) {
c.TotalPages(template.AlignRight(), template.FontSize(9),
template.TextColor(pdf.Gray(0.5)))
})
})
p.AutoRow(func(r *template.RowBuilder) {
r.Col(12, func(c *template.ColBuilder) {
c.Line(template.LineColor(pdf.RGBHex(0x1565C0)))
c.Spacer(document.Mm(3))
})
})
})
// Footer with page number
doc.Footer(func(p *template.PageBuilder) {
p.AutoRow(func(r *template.RowBuilder) {
r.Col(12, func(c *template.ColBuilder) {
c.Spacer(document.Mm(3))
c.Line(template.LineColor(pdf.Gray(0.7)))
c.Spacer(document.Mm(2))
})
})
p.AutoRow(func(r *template.RowBuilder) {
r.Col(6, func(c *template.ColBuilder) {
c.Text("Generated by gpdf", template.FontSize(8),
template.TextColor(pdf.Gray(0.5)))
})
r.Col(6, func(c *template.ColBuilder) {
c.PageNumber(template.AlignRight(), template.FontSize(8),
template.TextColor(pdf.Gray(0.5)))
})
})
})
// Create 4 pages
for i := range 4 {
page := doc.AddPage()
titles := []string{"Introduction", "Background", "Analysis", "Conclusion"}
page.AutoRow(func(r *template.RowBuilder) {
r.Col(12, func(c *template.ColBuilder) {
c.Text(titles[i], template.FontSize(18), template.Bold())
})
})
}
┌─ Page 1 ──────────────────────────────────────┐
│ Page Number Demo 4 total pages │ ← TotalPages()
│ ──────────────────────────────────────────── │
│ │
│ Introduction │
│ │
│ ──────────────────────────────────────────── │
│ Generated by gpdf Page 1│ ← PageNumber()
└───────────────────────────────────────────────┘
┌─ Page 4 ──────────────────────────────────────┐
│ Page Number Demo 4 total pages │
│ ──────────────────────────────────────────── │
│ │
│ Conclusion │
│ │
│ ──────────────────────────────────────────── │
│ Generated by gpdf Page 4│
└───────────────────────────────────────────────┘
다중 페이지 문서
콘텐츠가 페이지를 넘으면 gpdf는 자동으로 새 페이지를 생성합니다. 머리글과 바닥글(페이지 번호 포함)은 각 페이지에 적용됩니다.
// Create explicit pages
for i := range 5 {
page := doc.AddPage()
page.AutoRow(func(r *template.RowBuilder) {
r.Col(12, func(c *template.ColBuilder) {
c.Text(fmt.Sprintf("Page %d content", i+1))
})
})
}