```java title="Element-Based Output (Java)" import io.kreuzberg.Kreuzberg; import io.kreuzberg.ExtractionConfig; import io.kreuzberg.ExtractionResult; import io.kreuzberg.Element; import io.kreuzberg.OutputFormat; public class ElementBasedOutput { public static void main(String[] args) { // Configure element-based output ExtractionConfig config = new ExtractionConfig(); config.setOutputFormat(OutputFormat.ELEMENT_BASED); // Extract document ExtractionResult result = Kreuzberg.extractFileSync("document.pdf", config); // Access elements for (Element element : result.getElements()) { System.out.println("Type: " + element.getElementType()); String text = element.getText(); if (text.length() > 100) { text = text.substring(0, 100); } System.out.println("Text: " + text); if (element.getMetadata().getPageNumber() != null) { System.out.println("Page: " + element.getMetadata().getPageNumber()); } if (element.getMetadata().getCoordinates() != null) { var coords = element.getMetadata().getCoordinates(); System.out.printf("Coords: (%f, %f) - (%f, %f)%n", coords.getLeft(), coords.getTop(), coords.getRight(), coords.getBottom()); } System.out.println("---"); } // Filter by element type result.getElements().stream() .filter(e -> "title".equals(e.getElementType())) .forEach(title -> { String level = (String) title.getMetadata() .getAdditional() .getOrDefault("level", "unknown"); System.out.printf("[%s] %s%n", level, title.getText()); }); } } ```