Kotlin 中的 PDF 生成:库与工具概览

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

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

开始课程

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



PDF 文档生成是现代应用程序中的常见任务之一:从创建报告和发票到数据导出。Kotlin 作为一种现代 JVM 语言,为开发者提供了访问强大的 Java PDF 处理库的能力。本文将介绍 Kotlin 中用于 PDF 生成的主要工具、它们的特点以及使用示例。



Kotlin 中用于处理 PDF 的流行库



由于 Kotlin 与 Java 完全兼容,您可以使用任何 Java PDF 库。最流行的选项包括:



  • iText (版本 7/8) — 一个带有开源代码 (AGPL) 的商业库。提供广泛的功能:从头创建文档、处理表单、水印、加密。商业使用需要购买许可证。
  • Apache PDFBox — 一个免费库 (Apache 2.0)。允许创建 PDF、提取文本、填写表单。其工作层级比 iText 更低,但能提供对内容的完全控制。
  • OpenPDF — iText 4 的一个分支 (LGPL/MPL)。一个轻量级库,适用于基本任务:创建文本、表格、图像。适合没有复杂排版的简单项目。
  • Jetpack Compose + PDF — 一种现代方法:您使用 Compose 描述 UI,然后使用 Android 库(例如 android.graphics.pdf.PdfDocument)将其转换为 PDF。适用于 Android 应用程序。


项目配置与依赖添加



为了演示,我们将使用 iText 7 和 Apache PDFBox。在 build.gradle.kts 中添加依赖:



// 对于 iText 7implementation("com.itextpdf:itext7-core:8.0.4")

// 对于 Apache PDFBoximplementation("org.apache.pdfbox:pdfbox:3.0.2")


示例 1:使用文本创建 PDF (iText 7)



创建一个包含标题和段落的简单文档:



import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraph

fun createSimplePdf() { val writer = PdfWriter("output.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)

document.add(Paragraph("Привет, мир!")) document.add(Paragraph("Это PDF, созданный с помощью iText в Kotlin."))

document.close()}


示例 2:处理表格与西里尔字母 (iText 7)



为了正确显示西里尔字母,需要加载支持 Unicode 的字体。我们使用标准字体 FreeSans 或任何 TTF 字体:



import com.itextpdf.kernel.font.PdfFontFactoryimport com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Cellimport com.itextpdf.layout.element.Paragraphimport com.itextpdf.layout.element.Table

fun createTableWithCyrillic() { val writer = PdfWriter("table.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)

// 加载支持西里尔字母的字体 val font = PdfFontFactory.createFont("fonts/FreeSans.ttf", "Identity-H") document.setFont(font)

val table = Table(2) // 两列 table.addCell(Cell().add(Paragraph("Имя"))) table.addCell(Cell().add(Paragraph("Возраст"))) table.addCell(Cell().add(Paragraph("Анна"))) table.addCell(Cell().add(Paragraph("25"))) table.addCell(Cell().add(Paragraph("Иван"))) table.addCell(Cell().add(Paragraph("30")))

document.add(table) document.close()}


示例 3:使用图像创建 PDF (Apache PDFBox)



PDFBox 需要更详细的坐标操作,但提供了灵活性:




                
    
    

推荐