Генерация PDF отчётов на Go: обзор библиотек и примеры кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Генерация PDF отчётов на Go (Golang): полное руководство

Создание PDF-документов — одна из частых задач в веб-разработке, особенно при построении корпоративных систем, финансовых приложений или образовательных платформ. Язык Go (Golang) предлагает несколько мощных библиотек для генерации PDF, которые позволяют создавать как простые текстовые отчёты, так и сложные многостраничные документы с таблицами, графиками и изображениями. В этой статье мы рассмотрим три популярных подхода: gofpdf, maroto и интеграцию с wkhtmltopdf.

1. Библиотека gofpdf — низкоуровневое управление PDF

gofpdf — одна из старейших и наиболее гибких библиотек для генерации PDF на Go. Она предоставляет полный контроль над каждым элементом страницы, но требует больше кода для сложных макетов.

Установка

go get github.com/jung-kurt/gofpdf

Пример: простой отчёт с заголовком и таблицей

package main

import (
    "github.com/jung-kurt/gofpdf"
)

func main() {
    pdf := gofpdf.New("P", "mm", "A4", "")
    pdf.AddPage()
    pdf.SetFont("Arial", "B", 16)
    pdf.Cell(40, 10, "Отчёт о продажах")
    pdf.Ln(12)

    // Заголовки таблицы
    pdf.SetFont("Arial", "B", 12)
    headers := []string{"Товар", "Количество", "Цена"}
    for _, h := range headers {
        pdf.CellFormat(40, 10, h, "1", 0, "C", false, 0, "")
    }
    pdf.Ln(-1)

    // Данные
    pdf.SetFont("Arial", "", 12)
    data := [][]string{{"Ноутбук", "5", "45000"}, {"Мышь", "12", "1500"}}
    for _, row := range data {
        for _, cell := range row {
            pdf.CellFormat(40, 10, cell, "1", 0, "C", false, 0, "")
        }
        pdf.Ln(-1)
    }

    err := pdf.OutputFileAndClose("report.pdf")
    if err != nil {
        panic(err)
    }
}

Плюсы: минимальные зависимости, полный контроль, поддержка Unicode (шрифты TrueType).
Минусы: отсутствие готовых компонентов (таблицы, графики), нужно вручную рассчитывать позиции.

2. Библиотека maroto — высокоуровневая генерация с сеткой

maroto построена поверх gofpdf и предлагает компонентный подход с сеткой, что упрощает создание сложных макетов. Идеально подходит для типовых отчётов: счета, накладные, прайс-листы.

Установка

go get github.com/johnfercher/maroto/v2

Пример: отчёт с логотипом и таблицей

package main

import (
    "github.com/johnfercher/maroto/v2/pkg/core"
    "github.com/johnfercher/maroto/v2/pkg/props"
    "github.com/johnfercher/maroto/v2"
)

func main() {
    m := maroto.NewMaroto(maroto.WithMaxGridSize(12))
    m.RegisterHeader(func() {
        m.Row(20, func() {
            m.Col(3, func() {
                m.FileImage("logo.png", props.Rect{
                    Percent: 80,
                    Center:  true,
                })
            })
            m.Col(9, func() {
                m.Text("ООО «ТехноСервис»", props.Text{
                    Style: props.Bold,
                    Size:  16,
                })
            })
        })
    })

    m.Row(10, func() {
        m.Col(12, func() {
            m.Table([]string{"Наименование", "Кол-во", "Сумма"},
                [][]string{
                    {"Монитор 24\"", "2", "40000"},
                    {"Клавиатура", "5", "7500"},
                },
                props.Table{
                    Content: props.TableContent{
                        GridSizes: []uint{6, 3, 3},
                    },
                })
        })
    })

    document, _ := m.Generate()
    _ = document.Save("invoice.pdf")
}

Плюсы: быстрая разработка, автоматическое выравнивание, встроенная поддержка таблиц, QR-кодов и штрихкодов.
Минусы: более тяжёлая зависимость, сложнее кастомизация отдельных элементов.

3. Интеграция с wkhtmltopdf — конвертация HTML в PDF

Если вам нужно превратить HTML-шаблон в PDF (например, с CSS-стилями и JavaScript-графиками), используйте wkhtmltopdf через обёртку go-wkhtmltopdf. Это даёт возможность применять любые веб-технологии для оформления отчётов.

Установка

                    

Рекомендаций