PDF генерация в Go (Golang): библиотеки и примеры

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

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

Начать курс

PDF генерация в Go (Golang): обзор библиотек и инструментов

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

Почему Go для генерации PDF?

Go — компилируемый язык с отличной производительностью и простой моделью конкурентности. Для задач генерации PDF это означает:

  • Быструю обработку больших объёмов данных
  • Лёгкую интеграцию с веб-серверами (net/http)
  • Возможность распараллеливать генерацию нескольких документов
  • Отсутствие внешних зависимостей (бинарник включает всё необходимое)

Основные библиотеки для работы с PDF в Go

1. gofpdf — простая и популярная библиотека

gofpdf — это порт известной PHP-библиотеки FPDF на Go. Она предоставляет простой API для создания PDF с базовыми элементами: текст, линии, прямоугольники, изображения и таблицы. Библиотека не требует внешних зависимостей и поддерживает Unicode через встраивание шрифтов.

Пример создания простого PDF с 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.OutputFileAndClose("hello.pdf")
}

Основные возможности gofpdf:

  • Поддержка UTF-8 (требуется встраивание шрифтов TrueType)
  • Автоматические разрывы страниц
  • Векторная графика (линии, кривые, заливки)
  • Встраивание изображений (JPEG, PNG, GIF)
  • Таблицы с динамическими данными

2. UniPDF — коммерческая мощная библиотека

UniPDF (ранее FoxyUtils) — профессиональное решение для работы с PDF на Go. Библиотека имеет открытый исходный код, но для коммерческого использования требуется лицензия. UniPDF поддерживает не только создание, но и редактирование, конвертацию и извлечение данных из PDF.

Пример создания PDF с UniPDF:

package main

import (
    "os"
    "github.com/unidoc/unipdf/v3/creator"
)

func main() {
    c := creator.New()
    c.NewPage()
    
    // Добавление текста
    text := c.NewStyledParagraph()
    text.Append("Пример документа UniPDF")
    text.SetFontSize(18)
    c.Draw(text)
    
    // Сохранение
    c.WriteToFile("unipdf_example.pdf")
}

Уникальные возможности UniPDF:

  • Полный парсинг и редактирование существующих PDF
  • Поддержка форм, аннотаций и закладок
  • Конвертация HTML в PDF
  • Работа с цифровыми подписями
  • Извлечение текста и изображений

3. Maroto — генератор PDF на основе визуальных компонентов

Maroto построен поверх gofpdf и предлагает более высокоуровневый подход с использованием концепции "сетки" (grid). Это удобно для создания отчётов, счетов и других структурированных документов.

Пример с Maroto:

package main

import (
    "fmt"
    "github.com/johnfercher/maroto/v2/pkg/consts/align"
    "github.com/johnfercher/maroto/v2/pkg/consts/fontstyle"
    "github.com/johnfercher/maroto/v2/pkg/core"
    "github.com/johnfercher/maroto/v2/pkg/props"
    "github.com/johnfercher/maroto/v2"
)

func main() {
    m := maroto.New()
    m.Row(20, func() {
        m.Col(12, func() {
            m.Text("Счёт №123", props.Text{
                Style: fontstyle.Bold,
                Align: align.Center,
            })
        })
    })
    
    document, err := m.Generate()
    if err != nil {
        panic(err)
    }
    
    err = document.Save("invoice.pdf")
    if err != nil {
        panic(err)
    }
    
    fmt.Println("PDF создан успешно!")
}

Преимущества Maroto:

  • Декларативный стиль — легко читать и поддерживать
  • Автоматическое выравнивание и перенос строк
  • Встроенная поддержка таблиц, списков, QR-кодов
  • Гибкая система цветов и стилей

4. PDFcpu — для обработки и модификации PDF

<

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