PDF генерация в Kotlin: обзор библиотек и практические примеры
Генерация PDF-документов — одна из частых задач в современных приложениях: от создания отчётов и счетов до формирования сертификатов и электронных книг. Kotlin, благодаря своей лаконичности и совместимости с Java, предоставляет разработчикам доступ к мощным Java-библиотекам для работы с PDF. В этой статье мы рассмотрим три основные библиотеки: iText, Apache PDFBox и OpenPDF, а также приведём примеры кода на Kotlin.
1. iText — мощная и гибкая библиотека
iText — одна из самых популярных библиотек для создания и манипуляции PDF-документами на JVM. Она поддерживает сложное форматирование, таблицы, изображения, водяные знаки, шифрование и многое другое. Для Kotlin доступна официальная обёртка iText7 с Kotlin-расширениями.
Подключение (Gradle)
dependencies {
implementation("com.itextpdf:itext7-core:7.2.5")
implementation("com.itextpdf:itext7-kotlin-extensions:1.0.0")
}
Пример: создание простого PDF с текстом
import com.itextpdf.kernel.pdf.PdfDocument
import com.itextpdf.kernel.pdf.PdfWriter
import com.itextpdf.layout.Document
import com.itextpdf.layout.element.Paragraph
fun createSimplePdf(fileName: String) {
val writer = PdfWriter(fileName)
val pdf = PdfDocument(writer)
val document = Document(pdf)
document.add(Paragraph("Привет, мир PDF на Kotlin!"))
document.add(Paragraph("Это пример использования iText7."))
document.close()
println("PDF создан: $fileName")
}
fun main() {
createSimplePdf("example_itext.pdf")
}
Пример: таблица с данными
import com.itextpdf.layout.element.Table
import com.itextpdf.layout.element.Cell
fun createTablePdf(fileName: String) {
val writer = PdfWriter(fileName)
val pdf = PdfDocument(writer)
val document = Document(pdf)
val table = Table(3) // 3 колонки
table.addHeaderCell("Имя")
table.addHeaderCell("Возраст")
table.addHeaderCell("Город")
table.addCell("Анна")
table.addCell("28")
table.addCell("Москва")
table.addCell("Иван")
table.addCell("35")
table.addCell("Санкт-Петербург")
document.add(table)
document.close()
println("PDF с таблицей создан: $fileName")
}
2. Apache PDFBox — лёгкая и бесплатная альтернатива
Apache PDFBox — это open-source библиотека с открытым исходным кодом (лицензия Apache 2.0). Она идеально подходит для базовых задач: создание документов, извлечение текста, заполнение форм. В отличие от iText, PDFBox не требует лицензионных отчислений для коммерческого использования.
Подключение (Gradle)
dependencies {
implementation("org.apache.pdfbox:pdfbox:2.0.27")
}
Пример: создание PDF с текстом
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
fun createPdfWithPdfBox(fileName: String) {
val document = PDDocument()
val page = PDPage()
document.addPage(page)
val contentStream = PDPageContentStream(document, page)
contentStream.beginText()
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 14f)
contentStream.newLineAtOffset(100f, 700f)
contentStream.showText("PDFBox + Kotlin = отлично!")
contentStream.endText()
contentStream.close()
document.save(fileName)
document.close()
println("PDF создан: $fileName")
}
Пример: добавление изображения
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject
fun createPdfWithImage(fileName: String, imagePath: String) {
val document = PDDocument()
val page = PDPage()
document.addPage(page)
val image = PDImageXObject.createFromFile(imagePath, document)
val contentStream = PDPageContentStream(document, page)
contentStream.drawImage(image, 100f, 500f, 200f, 150f) // x, y, width, height
contentStream.close()
document.save(fileName)
document.close()
println("PDF с изображением создан: $fileName")
}
3. OpenPDF — простая и легковесная библиотека
OpenPDF — это форк iText 4, распространяемый под лицензией LGPL. Он идеально подходит для небольших проектов, где не нужны все возможности iText. Библиотека проста в использовании и не требует лицензирования.
Подключение (Gradle)
Также в библиотеке
Генерация PDF-отчётов на Go: обзор библиотек и примеры кода
testcontainers-go для Go: полное руководство с примерами
GraphQL библиотека на C++: реализация API с помощью graphql-cpp
Swagger/OpenAPI генерация для Go (Golang): полное руководство
Генератор QR-кодов на TypeScript: библиотека qrcode и её использование
Рекомендаций
Также в библиотеке
Генерация PDF-отчётов на Go: обзор библиотек и примеры кода
GraphQL библиотека на C++: реализация API с помощью graphql-cpp
Swagger/OpenAPI генерация для Go (Golang): полное руководство
Генератор QR-кодов на TypeScript: библиотека qrcode и её использование