使用 Kotlin 生成 PDF 报告:iText 7 库

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

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

开始课程

使用 iText 7 在 Kotlin 中生成 PDF 报告



在现代开发中,经常需要创建结构化的 PDF 文档:报告、发票、合同或分析报告。Kotlin 语言凭借其简洁性和与 Java 的兼容性,非常适合此任务。最强大且流行的 PDF 处理库之一是 iText 7(之前用于 .NET 的 iTextSharp)。在本文中,我们将介绍如何使用它在 Kotlin 中生成专业的 PDF 报告。



为什么选择 iText 7?

  • 完全控制内容:文本、表格、图像、字体。
  • 高性能:该库针对处理大型文档进行了优化。
  • 跨平台:可在 JVM、Android 和 Web 上运行。
  • 许可:开源项目使用 AGPL 许可证,或商业许可证。


安装 (Gradle)

在 build.gradle.kts 中添加依赖项:

dependencies {    implementation("com.itextpdf:itext7-core:7.2.5")}


基本示例:"Hello, PDF!"

创建一个包含文本的简单 PDF 文档:

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

fun main() { val writer = PdfWriter("hello.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)

document.add(Paragraph("你好,Kotlin 上的 PDF 世界!")) document.close() println("PDF 已创建:hello.pdf")}


创建带表格和样式的报告

对于实际报告,需要的不仅仅是文本。让我们添加表格、标题和样式:

import com.itextpdf.kernel.colors.ColorConstantsimport 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.Tableimport com.itextpdf.layout.properties.UnitValue

fun generateReport() { val writer = PdfWriter("report.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)

// 标题 val title = Paragraph("月度销售报告") .setFontSize(20) .setBold() .setTextAlignment(com.itextpdf.layout.properties.TextAlignment.CENTER) document.add(title)

// 表格 val table = Table(UnitValue.createPercentArray(floatArrayOf(1f, 2f, 1.5f, 1.5f))) table.setWidth(UnitValue.createPercentValue(100))

// 表格标题 val headers = listOf("ID", "商品", "数量", "价格") headers.forEach { header -> val cell = Cell().add(Paragraph(header).setBold()) cell.setBackgroundColor(ColorConstants.LIGHT_GRAY) table.addCell(cell) }

// 数据 val data = listOf( listOf("1", "笔记本电脑", "3", "150000"), listOf("2", "鼠标", "10", "5000"), listOf("3", "键盘", "5", "12500") ) data.forEach { row -> row.forEach { value -> table.addCell(Cell().add(Paragraph(value))) } }

document.add(table) document.close() println("报告已创建:report.pdf")}

fun main() { generateReport()}


添加图像和样式

报告中经常需要插入徽标或图表。iText 7 支持图像:

import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Imageimport com.itextpdf.io.image.ImageDataFactory

fun addImageExample() { val writer = PdfWriter("report_with_image.pdf") val pdf = PdfDocument(writer) val document = Documen

推荐