Kotlin 中的 PDF 生成:最佳库与代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Kotlin 中的 PDF 生成:库概述与实践示例



生成 PDF 文档是现代应用程序中的常见任务之一:从创建报告和发票到生成证书和电子书。Kotlin 凭借其简洁性和与 Java 的兼容性,为开发者提供了访问强大的 Java PDF 处理库的途径。在本文中,我们将介绍三个主要库:iText、Apache PDFBox 和 OpenPDF,并提供 Kotlin 代码示例。



1. iText — 强大且灵活的库



iText 是在 JVM 上创建和操作 PDF 文档最流行的库之一。它支持复杂的格式设置、表格、图像、水印、加密等功能。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.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraph

fun createSimplePdf(fileName: String) { val writer = PdfWriter(fileName) val pdf = PdfDocument(writer) val document = Document(pdf)

document.add(Paragraph("你好,Kotlin 的 PDF 世界!")) document.add(Paragraph("这是使用 iText7 的示例。"))

document.close() println("PDF 已创建:$fileName")}

fun main() { createSimplePdf("example_itext.pdf")}


示例:带数据的表格

import com.itextpdf.layout.element.Tableimport 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 是一个开源库(Apache 2.0 许可证)。它非常适合基本任务:创建文档、提取文本、填写表单。与 iText 不同,PDFBox 在商业使用中无需支付许可费用。



依赖配置 (Gradle)

dependencies {    implementation("org.apache.pdfbox:pdfbox:2.0.27")}


示例:创建包含文本的 PDF

import org.apache.pdfbox.pdmodel.PDDocumentimport org.apache.pdfbox.pdmodel.PDPageimport org.apache.pdfbox.pdmodel.PDPageContentStreamimport 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

推荐