```go title="Go"
package main

import (
	"fmt"
	"log"
	"strings"

	"github.com/kreuzberg-dev/kreuzberg/packages/go/v5"
)

func main() {
	result, err := kreuzberg.ExtractFileSync("document.pdf", nil)
	if err != nil {
		log.Fatalf("extract pdf: %v", err)
	}

	// Access PDF metadata
	if pdf, ok := result.Metadata.PdfMetadata(); ok {
		if pdf.PageCount != nil {
			fmt.Printf("Pages: %d\n", *pdf.PageCount)
		}
		if pdf.Author != nil {
			fmt.Printf("Author: %s\n", *pdf.Author)
		}
		if pdf.Title != nil {
			fmt.Printf("Title: %s\n", *pdf.Title)
		}
	}

	// Access HTML metadata
	htmlResult, err := kreuzberg.ExtractFileSync("page.html", nil)
	if err != nil {
		log.Fatalf("extract html: %v", err)
	}
	if html, ok := htmlResult.Metadata.HTMLMetadata(); ok {
		if html.Title != nil {
			fmt.Printf("Title: %s\n", *html.Title)
		}
		if html.Description != nil {
			fmt.Printf("Description: %s\n", *html.Description)
		}

		// Access keywords as array
		if len(html.Keywords) > 0 {
			fmt.Printf("Keywords: %s\n", strings.Join(html.Keywords, ", "))
		}

		// Access canonical URL (renamed from canonical)
		if html.CanonicalURL != nil {
			fmt.Printf("Canonical URL: %s\n", *html.CanonicalURL)
		}

		// Access Open Graph fields from map
		if len(html.OpenGraph) > 0 {
			if image, ok := html.OpenGraph["image"]; ok {
				fmt.Printf("Open Graph Image: %s\n", image)
			}
			if ogTitle, ok := html.OpenGraph["title"]; ok {
				fmt.Printf("Open Graph Title: %s\n", ogTitle)
			}
			if ogType, ok := html.OpenGraph["type"]; ok {
				fmt.Printf("Open Graph Type: %s\n", ogType)
			}
		}

		// Access Twitter Card fields from map
		if len(html.TwitterCard) > 0 {
			if card, ok := html.TwitterCard["card"]; ok {
				fmt.Printf("Twitter Card Type: %s\n", card)
			}
			if creator, ok := html.TwitterCard["creator"]; ok {
				fmt.Printf("Twitter Creator: %s\n", creator)
			}
		}

		// Access new fields
		if html.Language != nil {
			fmt.Printf("Language: %s\n", *html.Language)
		}

		if html.TextDirection != nil {
			fmt.Printf("Text Direction: %s\n", *html.TextDirection)
		}

		// Access headers
		if len(html.Headers) > 0 {
			headers := make([]string, len(html.Headers))
			for i, h := range html.Headers {
				headers[i] = h.Text
			}
			fmt.Printf("Headers: %s\n", strings.Join(headers, ", "))
		}

		// Access links
		if len(html.Links) > 0 {
			for _, link := range html.Links {
				fmt.Printf("Link: %s (%s)\n", link.Href, link.Text)
			}
		}

		// Access images
		if len(html.Images) > 0 {
			for _, image := range html.Images {
				fmt.Printf("Image: %s\n", image.Src)
			}
		}

		// Access structured data
		if len(html.StructuredData) > 0 {
			fmt.Printf("Structured data items: %d\n", len(html.StructuredData))
		}
	}
}
```
