```java title="CliWithConfig.java" import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public final class CliWithConfig { private static final ObjectMapper MAPPER = new ObjectMapper(); private CliWithConfig() {} public static JsonNode extractWithConfig(String filePath, String configPath) throws IOException, InterruptedException { ProcessBuilder pb = new ProcessBuilder( "kreuzberg", "extract", filePath, "--config", configPath, "--format", "json"); pb.redirectErrorStream(true); Process process = pb.start(); StringBuilder output = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { String line; while ((line = reader.readLine()) != null) { output.append(line); } } int exitCode = process.waitFor(); if (exitCode != 0) { throw new RuntimeException("CLI exited with code " + exitCode + ": " + output); } return MAPPER.readTree(output.toString()); } public static void main(String[] args) throws IOException, InterruptedException { String configFile = "kreuzberg.toml"; String document = "document.pdf"; System.out.println("Extracting " + document + " with config " + configFile); JsonNode result = extractWithConfig(document, configFile); String content = result.get("content").asText(); System.out.println("Content length: " + content.length()); System.out.println("Format: " + result.get("format").asText()); System.out.println("Languages: " + result.get("languages").toString()); } } ```