PDF генерация в Kotlin: библиотеки и инструменты (iText, Apache PDFBox)

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

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

Начать курс

PDF генерация в Kotlin: обзор библиотек и практические примеры

Kotlin, как современный язык для JVM, предоставляет разработчикам мощные инструменты для работы с PDF-документами. Благодаря полной совместимости с Java-экосистемой вы можете использовать проверенные временем библиотеки, такие как iText и Apache PDFBox, а также современные Kotlin-фреймворки. В этой статье мы рассмотрим основные подходы к генерации PDF на Kotlin, приведем примеры кода и сравним популярные решения.

Почему Kotlin для работы с PDF?

Kotlin предлагает ряд преимуществ перед Java при работе с PDF:

  • Лаконичный синтаксис — меньше шаблонного кода для создания документов
  • Null-безопасность — снижает риск ошибок при работе с nullable-полями
  • Extension-функции — позволяют расширять функциональность библиотек
  • DSL-построители — идеально подходят для описания структуры PDF
  • Полная совместимость — все Java-библиотеки работают без изменений

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

1. iText (iText 7 / iText 8)

iText — самая популярная коммерческая библиотека для работы с PDF. Для Kotlin доступна через Java-интероп. Включает модули:

  • kernel — базовые операции с PDF
  • layout — высокоуровневое построение документа
  • html2pdf — конвертация HTML в PDF
  • pdfa — поддержка PDF/A

Пример создания простого PDF с iText 7 на Kotlin:

import com.itextpdf.kernel.pdf.PdfDocument
import com.itextpdf.kernel.pdf.PdfWriter
import com.itextpdf.layout.Document
import com.itextpdf.layout.element.Paragraph
import java.io.FileOutputStream

fun createSimplePdf() {
    val writer = PdfWriter(FileOutputStream("hello_kotlin.pdf"))
    val pdfDoc = PdfDocument(writer)
    val document = Document(pdfDoc)
    
    document.add(Paragraph("Привет, Kotlin!"))
    document.add(Paragraph("Это PDF, созданный с помощью iText 7"))
    
    document.close()
    println("PDF успешно создан")
}

2. Apache PDFBox

Apache PDFBox — бесплатная библиотека с открытым исходным кодом. Отлично подходит для базовых задач: создание, редактирование, извлечение текста. В Kotlin используется через Java API.

Пример с PDFBox:

import org.apache.pdfbox.pdmodel.PDDocument
import org.apache.pdfbox.pdmodel.PDPage
import org.apache.pdfbox.pdmodel.PDPageContentStream
import org.apache.pdfbox.pdmodel.font.PDType1Font
import java.io.File

fun createPdfWithBox() {
    val document = PDDocument()
    val page = PDPage()
    document.addPage(page)
    
    val contentStream = PDPageContentStream(document, page)
    contentStream.beginText()
    contentStream.setFont(PDType1Font.HELVETICA_BOLD, 14f)
    contentStream.newLineAtOffset(50f, 700f)
    contentStream.showText("PDFBox + Kotlin = ❤")
    contentStream.endText()
    contentStream.close()
    
    document.save(File("pdfbox_example.pdf"))
    document.close()
    println("Документ сохранен")
}

3. Kotlin DSL для PDF (KPDF)

KPDF — нативная Kotlin-библиотека, использующая DSL-построители. Позволяет описывать документ в декларативном стиле:

// Пример с гипотетическим DSL (адаптация под реальные библиотеки)
fun generateInvoice() {
    pdfDocument {
        page {
            paragraph("Счет №123") {
                fontSize = 24
                bold()
            }
            table {
                row { cell("Товар"); cell("Цена") }
                row { cell("Kotlin-консультация"); cell("5000 руб") }
            }
        }
    }.save("invoice.pdf")
}

Сравнение библиотек

КритерийiTextPDFBoxKPDF (DSL)
ЛицензияAGPL (коммерческая)Apache 2.0MIT
Простота KotlinСредняяСредняяВысокая
Поддержка HTMLДа (html2pdf)НетНет
ПроизводительностьВысокая

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