---
title: "Edit PDF metadata on Android | Nutrient SDK"
canonical_url: "https://www.nutrient.io/guides/android/customizing-pdf-pages/customizing-document-metadata/"
md_url: "https://www.nutrient.io/guides/android/customizing-pdf-pages/customizing-document-metadata.md"
last_updated: "2026-05-18T06:34:32.145Z"
description: "Use DocumentPdfMetadata and DocumentXmpMetadata to retrieve or modify PDF properties such as Author, CreationDate, and custom key-value pairs, then persist changes with PdfDocument#saveIfModified() on Android."
---

# Edit PDF metadata on Android

Metadata may be stored in a PDF document in two ways: in a document information dictionary associated with the document, or in a metadata stream containing XMP data. To give you full access to all the PDF metadata, Nutrient comes with [`DocumentPdfMetadata`](https://www.nutrient.io/api/android/nutrient/com.pspdfkit.document.metadata/-document-pdf-metadata/index.html) and [`DocumentXmpMetadata`](https://www.nutrient.io/api/android/nutrient/com.pspdfkit.document.metadata/-document-xmp-metadata/index.html), which allow you to retrieve or modify a document’s metadata.

## PDF metadata

Use [`DocumentPdfMetadata`](https://www.nutrient.io/api/android/nutrient/com.pspdfkit.document.metadata/-document-pdf-metadata/index.html) to work with the dictionary-based metadata in a PDF.

All values specified in the [`PdfValue`](https://www.nutrient.io/api/android/nutrient/com.pspdfkit.document/-pdf-value/index.html) are represented by the following types:

- `Boolean`

- `long`

- `double`

- `String`

- `List<PdfValue>`

- `Map<String, PdfValue>`

By default, the dictionary metadata may contain the following information keys:

- `Author`

- `CreationDate`

- `Creator`

- `Keywords`

- `ModDate`

- `Producer`

- `Title`

You can, of course, add any supported key-value dictionary to the metadata. When dealing with these predefined keys, it’s recommended to use the [`DocumentPdfMetadata`](https://www.nutrient.io/api/android/nutrient/com.pspdfkit.document.metadata/-document-pdf-metadata/index.html) getters and setters so that you get out-of-the-box conversions from objects such as `Date`.




### Retrieving PDF metadata

To get an entry of the metadata dictionary (e.g. the `Author`), you can use the following code snippet:

### KOTLIN

```kotlin

val document =...
val pdfMetadata = document.getPdfMetadata()
val author = pdfMetada.getAuthor()

```

### JAVA

```java

PdfDocument document =...
DocumentPdfMetadata pdfMetadata = document.getPdfMetadata();
String author = pdfMetadata.getAuthor();

```

For any custom values, use this:

### KOTLIN

```kotlin

val document =...
val pdfMetadata = document.pdfMetadata
val value = pdfMetada.get("Custom key")

```

### JAVA

```java

PdfDocument document =...
DocumentPdfMetadata pdfMetadata = document.getPdfMetadata();
PdfValue value = pdfMetadata.get("Custom key");

```

### Saving PDF metadata

You can customize the document metadata and then save the document, which also saves the modified metadata into the PDF:

### KOTLIN

```kotlin

val pdfMetadata = document.pdfMetadata
val metadataKey = "Key"
pdfMetadata.set(metadataKey, PdfValue(3))
document.saveIfModified()

```

### JAVA

```java

DocumentPdfMetadata pdfMetadata = document.getPdfMetadata();
String metadataKey = "Key";
pdfMetadata.set(metadataKey, new PdfValue(3));
document.saveIfModified();

```

## XMP metadata

Use [`DocumentXmpMetadata`](https://www.nutrient.io/api/android/nutrient/com.pspdfkit.document.metadata/-document-xmp-metadata/index.html) to work with the metadata stream containing XMP data.

Each key in the XMP metadata stream has to have a namespace set. You can define your own namespace or use one of the already existing ones. PSPDFKit exposes two constants for common
namespaces:

- `DocumentPdfMetadata#XMP_PDF_NAMESPACE`/`DocumentPdfMetadata#XMP_PDF_NAMESPACE_PREFIX`

  — [the XMP PDF namespace created by Adobe](https://developer.adobe.com/xmp/docs/XMPSpecifications/) §3.1

- `DocumentXmpMetadata#XMP_DC_NAMESPACE`/`DocumentXmpMetadata#XMP_DC_NAMESPACE_PREFIX`

  — [the Dublin Core namespace](https://en.wikipedia.org/wiki/Dublin_Core)

When setting a value, you also have to pass along a suggested namespace prefix, as this can’t be generated automatically.





### Retrieving XMP metadata

Use the following code snippet to get an object from the XMP metadata:

### KOTLIN

```kotlin

val xmpMetadata = document.xmpMetadata
val pdfValue = xmpMetadata.get("Key", NAMESPACE)

```

### JAVA

```java

DocumentXmpMetadata xmpMetadata = document.getXmpMetadata();
PdfValue pdfValue = xmpMetadata.get("Key", NAMESPACE);

```

### Saving XMP metadata

You can also set new metadata and save it to the document:

### KOTLIN

```kotlin

val xmpMetadata = document.xmpMetadata

val metadataKey = "MyKey"
val metadataValue = "MyValue"

xmpMetadata.set(metadataKey, metadataValue, NAMESPACE, NAMESPACE_PREFIX)

```

### JAVA

```java

DocumentXmpMetadata xmpMetadata = document.getXmpMetadata();

String metadataKey = "MyKey";
String metadataValue = "MyValue";

xmpMetadata.set(metadataKey, metadataValue, NAMESPACE, NAMESPACE_PREFIX);

```
---

## Related pages

- [Change the document title in the PDF metadata on Android](/guides/android/customizing-the-interface/changing-the-document-title.md)

