BASALT · JOURNAL

What XMP metadata in a PDF is, and why clearing properties leaves it

2026-10-30 · what is xmp metadata in pdf

XMP metadata in a PDF is an XML packet, a block of text stored inside the file as a metadata stream, that describes the document: its title, author, the app that made it, its dates and identifiers. It's a second copy of information the file also keeps in its older properties, and it's stored separately. Clearing the author in a properties panel doesn't touch it.

That separation is the reason it matters before you share a file. On macOS 15, Preview, Finder and mdls all ignore XMP, so a PDF can look clean in every built-in view while the packet still names the author.

What the packet is and where it sits

XMP stands for Extensible Metadata Platform, defined in the ISO 16684-1 standard. In a PDF the document catalog, the root object of the file, points to the packet with a /Metadata entry. That entry leads to a stream whose dictionary says /Type /Metadata and /Subtype /XML. The stream's content is readable XML, usually wrapped in <?xpacket?> markers and followed by blank padding so a tool can rewrite it in place. A closing marker of <?xpacket end="w"?> says the packet may be rewritten that way. Other objects, such as an embedded photo, can carry packets of their own, which image metadata in PDFs covers.

The older store is the document information dictionary, with keys like /Title, /Author, /Creator and /Producer. Both stores exist in most files. How to see a PDF's metadata on a Mac compares what each Mac view shows of them.

Which one is the main record is changing. PDF 2.0 deprecates the information dictionary except for the two dates, /CreationDate and /ModDate, and points software to XMP for everything else. Most files still carry both.

What fields it carries

XMP groups properties by namespace, each with a prefix. The ones you'll meet most in a PDF are these.

Here's a trimmed packet from a test file, with the wrapper lines removed:

<rdf:Description rdf:about=""
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:xmp="http://ns.adobe.com/xap/1.0/"
    xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
  <dc:title><rdf:Alt><rdf:li xml:lang="x-default">XMP Title</rdf:li></rdf:Alt></dc:title>
  <dc:creator><rdf:Seq><rdf:li>XMP Person</rdf:li></rdf:Seq></dc:creator>
  <xmp:CreatorTool>XMP Tool</xmp:CreatorTool>
  <xmp:CreateDate>2018-01-01T10:00:00Z</xmp:CreateDate>
  <xmpMM:DocumentID>uuid:1111</xmpMM:DocumentID>
</rdf:Description>

The title sits inside an rdf:Alt list so it can carry versions in several languages, and the author inside an rdf:Seq, an ordered list. A date here is written as an ISO 8601 timestamp, not in the D:2019... form of the older dictionary.

Why the two copies disagree

Different code writes them, at different times. An app that updates the information dictionary on save may leave the packet as it was, and a tool that edits only the packet leaves the dictionary alone. Over a few rounds of export and re-save you can end up with a title in one and a different title in the other, or an author in one and none in the other.

This is how a clean-looking file leaks. Remove the Author in a panel that edits only the dictionary, and the XMP dc:creator stays. Why a PDF shows an author name goes through where the name comes from in the first place.

Why Mac tools don't show it

On macOS 15, PDFKit, the PDF framework built into the system, reads the information dictionary and ignores the XMP packet. Preview's Inspector fields don't include XMP either: a file whose author appears only in XMP shows a blank Author there. Spotlight ignores it too: a test file whose only metadata was XMP showed no title and no author in mdimport -t -d2, which reads a file the way Spotlight does and stores nothing. Finder's Get Info draws on Spotlight, so it has the same gap.

The result is that "Preview shows no author" tells you only that the information dictionary has none.

How to read the packet on a Mac

Install qpdf with brew install qpdf. It only reads files here. First get the object numbers from the trailer:

qpdf --show-object=trailer document.pdf

That prints something like /Info 6 0 R /Root 5 0 R. The /Root number is the catalog. Print it:

qpdf --show-object=5 document.pdf

If the output contains /Metadata 7 0 R, the file has an XMP packet in object 7. If there's no /Metadata entry, there's no packet. Print it decoded:

qpdf --show-object=7 --filtered-stream-data document.pdf

You'll see the XML above, with real values. Use your own object numbers, which differ from file to file. To compare, print the information dictionary with qpdf --show-object=6 document.pdf, using the number after /Info. Don't try to grep the raw file for a name first: the packet's stream can be compressed, and in files from PDF 1.5 on the catalog and info dictionary can sit inside compressed object streams, so the raw bytes may not contain the text even when the file does.

Getting rid of it

Fix it where the file is made. Clear the author, title and keywords in your source application's document properties, export again, then run the commands above on the result. Removing PDF metadata on a Mac goes through the steps for both stores.

Don't count on a re-save to clear it. On macOS 15, a PDF re-saved through PDFKit, the system's PDF framework, kept its XMP packet word for word while the information dictionary got a new Producer and a new creation date. The packet was compressed in the new file, so a raw grep -a for the author's name found nothing, yet --filtered-stream-data still printed it. After that save the two stores disagreed more than before.

Frequently asked questions

What is XMP metadata?

It's a standard way of labeling files with descriptive information, written as XML and defined in ISO 16684-1. In a PDF it holds the title, author, creating application, dates and document identifiers in a stream the catalog points to. Many image files use the same format.

How do I view XMP metadata in a PDF?

Use qpdf: run qpdf --show-object=trailer document.pdf to find the catalog number, print the catalog to find the /Metadata object, then print that object with --filtered-stream-data. Preview, Finder and mdls won't show it on macOS 15, so a viewer that reads the information dictionary alone will miss it.

Is there a PDF XMP metadata viewer built into the Mac?

Not on macOS 15. Preview's fields, Finder and Spotlight all leave the packet out. Third-party tools such as exiftool can print it, and the plain text route above with qpdf works with nothing more than a Terminal window.

Is XMP the same as the PDF Properties dialog?

No. A properties dialog usually shows the information dictionary, and a reader may or may not merge in XMP values. They're two stores with overlapping fields, so a dialog can look empty while the packet still carries data.

Does XMP metadata include dates?

Yes. xmp:CreateDate, xmp:ModifyDate and xmp:MetadataDate record when the content was created, last changed and when the metadata was last written. They're separate from the dates in the information dictionary and from the file's dates on disk. Any of them can be rewritten by a later save.

Can XMP show the edit history of a PDF?

Sometimes. If the application that saved the file wrote xmpMM:History, the packet lists actions with software names and times. It records software, not people, and many files carry no history at all, so an empty one proves nothing.

Will deleting the author in a properties panel remove XMP?

Not necessarily. A panel that edits the information dictionary leaves the packet in place, so dc:creator can keep the name. Check the file with qpdf after any change before you rely on it.

Doing it in Basalt

Basalt can tell you whether a PDF has an XMP packet. Its Inspect tool flags "XMP metadata is embedded", alongside which of Title, Author, Subject, Keywords, Creator and Producer are filled, and it doesn't quote any of the values. To remove the packet, the Strip metadata step in Run a Procedure rebuilds the document from its pages, which leaves the XMP behind together with the information dictionary and its stored dates.

That rebuild also drops bookmarks, tags, embedded files and document-level JavaScript, and it writes a single generation. Basalt can't edit or set metadata values, so it can remove a title but not write a new one. The original file stays untouched. $29 once covers up to three Macs, and the first 24 hours are free.

Redaction that proves itself

Basalt destroys the content you mark, then re-opens the file it wrote and proves the content is gone before it saves anything. Your documents never leave your Mac.

DOWNLOAD BASALT 2.3.2 BUY $29 FREE FOR 24 HOURS · MACOS 13+