```kotlin title="Kotlin"
import dev.kreuzberg.*
import java.nio.file.Paths
import java.util.Optional

fun main() {
    val schema = mapOf(
        "type" to "object",
        "properties" to mapOf(
            "title" to mapOf("type" to "string"),
            "authors" to mapOf("type" to "array", "items" to mapOf("type" to "string")),
            "date" to mapOf("type" to "string")
        ),
        "required" to listOf("title", "authors", "date"),
        "additionalProperties" to false
    )

    val llm = LlmConfig.builder()
        .withModel("openai/gpt-4o-mini")
        .build()

    val structured = StructuredExtractionConfig(
        schema,
        "document",
        null,
        true,
        null,
        llm
    )

    val config = ExtractionConfig.builder()
        .withStructuredExtraction(Optional.of(structured))
        .build()

    val result = Kreuzberg.extractFileSync(Paths.get("paper.pdf"), null, config)
    result.structuredOutput()?.let { println(it) }
}
```
