XMP Meta Data
The XMP (Extensible Metadata Platform) provides a standard format for the creation, processing, and interchange of Metadata for a wide variety of applications. Metadata is data that describes the characteristics or properties of a document. It can be distinguished from the main contents of a document. For example, for a word processing document, the contents include the actual text data and formatting information, while the Metadata might include such properties as author, modification date, or copyright status.
In order to make applications work more effectively with Metadata, there must be a common standard that they understand. XMP, the Extensible Metadata Platform, is designed to provide such a standard.
XMP is provided with Schemas: Predefined sets of Metadata property definitions that are relevant for a wide range of applications.
- The Dublin Core Schema provides a set of commonly used properties.
- The XMP Basic Schema contains properties that provide basic descriptive information.
- The Rights Management Schema includes properties related to rights management. These properties specify information regarding the legal restrictions associated with a resource.
- The Basic Job Ticket Schema describes very simple work flow or job information.
- The Paged-Text Schema is used to get the maximum page size and the total number of pages in a document.
- Adobe PDF Schema specifies properties used with Adobe PDF files.
This example shows how to create an XMP Metadata and add it to the document.
using System;
using System.IO;
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Xmp;
class MyClass
{
static void Main()
{
// Create a PDF Document
Document document = new Document();
document.Keywords = "XMP, metadata, pdf, example";
document.Title = "Pdf document with xmp metadata";
document.Author = "MyAuthor";
// Add blank pages to the document
document.Pages.Add( new Page( PageSize.Letter ) );
document.Pages.Add( new Page( PageSize.Letter ) );
// Create an Xmp Metadata
XmpMetadata xmp = new XmpMetadata();
// Dublin Core Schema.
DublinCoreSchema dc = xmp.DublinCore;
dc.Contributors.Add( "Abc" );
dc.Contributors.Add( "Xyz" );
dc.Contributors.Add( "Pqrs" );
dc.Coverage = "To test all the attributes of schema's provided";
dc.Creators.Add( "MyProduct" );
dc.Creators.Add( "MyCompany" );
dc.Date.Add( DateTime.Now );
dc.Description.AddLang( "en-us", "XMP Schema's test" );
dc.Identifier = "First XMP pdf";
dc.Publisher.Add( "mydomain.com" );
dc.Publisher.Add( "MyCompany" );
dc.Relation.Add( "Test PDF with XMP" );
dc.Rights.DefaultText = "US English";
dc.Rights.AddLang( "en-us", "All rights reserved 2013,MyCompany." );
dc.Source = "XMP Project";
dc.Subject.Add( "eXtensible Metadata Platform" );
dc.Title.AddLang( "en-us", "XMP" );
dc.Title.AddLang( "it-it", "XMP - Piattaforma Estendible di Metadata" );
dc.Title.AddLang( "du-du", "De hallo Wereld" );
dc.Title.AddLang( "fr-fr", "XMP - Une Platforme Extensible pour les Mtdonnes" );
dc.Title.AddLang( "DE-DE", " Hallo Welt" );
dc.Type.Add( "Pdf file containing xmp metadata" );
// Basic Schema.
BasicSchema bs = xmp.BasicSchema;
bs.Advisory.Add( "Date" );
bs.Advisory.Add( "Contributors" );
bs.Nickname = "xyz";
bs.Thumbnails.Add(106, 80, "JPEG", GetImage( @"C:\thumbnail.jpg" ) );
// Rights Management Schema.
RightsManagementSchema rm = new RightsManagementSchema();
rm.Marked2 = CopyrightStatus.PublicDomain;
rm.Owner.Add( "MyCompany" );
rm.UsageTerms.AddLang( "en-us", "Contact MyCompany" );
// Basic Job Ticket Schema.
BasicJobTicketSchema job = new BasicJobTicketSchema();
job.JobRef.Add( "MyCompany", "Xmp Test", new Uri( "http://www.mydomain.com/" ) );
job.JobRef.Add( "MyCompany", "XMP Metadata", new Uri( "http://www.mydomain.com/" ) );
// Paged-Text Schema.
PagedTextSchema pt = new PagedTextSchema();
// Add the Xmp Metadata to the document
document.XmpMetadata = xmp;
// Save the PDF document
document.Draw(pdfFilePath);
}
private static byte[] GetImage( string filePath )
{
FileStream inFile = new FileStream( filePath, FileMode.Open, FileAccess.Read );
byte[] binaryData = new byte[ inFile.Length ];
inFile.Read( binaryData, 0, (int)inFile.Length );
inFile.Close();
return binaryData;
}
}
Imports System
Imports System.IO
Imports ceTe.DynamicPDF
Imports ceTe.DynamicPDF.Xmp
Module MyModule
Sub Main()
' Create a PDF Document
Dim MyDocument As Document = New Document
MyDocument.Keywords = "XMP, metadata, pdf, example"
MyDocument.Title = "Pdf document with xmp metadata"
MyDocument.Author = "MyAuthor"
' Add blank pages to the document
MyDocument.Pages.Add(New Page(PageSize.Letter))
MyDocument.Pages.Add(New Page(PageSize.Letter))
' Create an Xmp Metadata
Dim MyXmp As XmpMetadata = New XmpMetadata
' Dublin Core Schema.
Dim Mydc As DublinCoreSchema = MyXmp.DublinCore
Mydc.Contributors.Add( "Abc" )
Mydc.Contributors.Add( "Xyz" )
Mydc.Contributors.Add( "Pqrs" )
Mydc.Coverage = "To test all the attributes of schema's provided"
Mydc.Creators.Add( "MyProduct" )
Mydc.Creators.Add( "MyCompany" )
Mydc.Date.Add( DateTime.Now )
Mydc.Description.AddLang( "en-us", "XMP Schema's test" )
Mydc.Identifier = "First XMP pdf"
Mydc.Publisher.Add( "mydomain.com" )
Mydc.Publisher.Add( "MyCompany" )
Mydc.Relation.Add( "test pdf with xmp" )
Mydc.Rights.DefaultText = "US English"
Mydc.Rights.AddLang( "en-us", "All rights reserved 2013,MyCompany." )
Mydc.Source = "XMP Project"
Mydc.Subject.Add( "eXtensible Metadata Platform" )
Mydc.Title.AddLang( "en-us", "XMP" )
Mydc.Title.AddLang( "it-it", "XMP - Piattaforma Estendible di Metadata" )
Mydc.Title.AddLang( "du-du", "De hallo Wereld" )
Mydc.Title.AddLang( "fr-fr", "XMP - Une Platforme Extensible pour les Mtdonnes" )
Mydc.Title.AddLang( "DE-DE", " Hallo Welt" )
Mydc.Type.Add( "Pdf file containing xmp metadata" )
' Basic Schema.
Dim Mybs As BasicSchema = MyXmp.BasicSchema
Mybs.Advisory.Add( "Date" )
Mybs.Advisory.Add( "Contributors" )
Mybs.Nickname = "xyz"
Mybs.Thumbnails.Add(106, 80, "JPEG", GetImage("C:\thumbnail.jpg"))
' Rights Management Schema.
Dim Myrm As RightsManagementSchema = New RightsManagementSchema
Myrm.Marked2 = CopyrightStatus.PublicDomain
Myrm.Owner.Add( "MyCompany" )
Myrm.UsageTerms.AddLang( "en-us", "Contact MyCompany" )
' Basic Job Ticket Schema.
Dim MyJob As BasicJobTicketSchema = New BasicJobTicketSchema
MyJob.JobRef.Add( "MyCompany", "Xmp Test", new Uri( "http://www.mydomain.com/" ) )
MyJob.JobRef.Add( "MyCompany", "XMP Metadata", new Uri( "http://www.mydomain.com/" ) )
' Paged-Text Schema.
Dim Mypt As PagedTextSchema = New PagedTextSchema
' Add the Xmp Metadata to the document
MyDocument.XmpMetadata = MyXmp
' Save the PDF document
MyDocument.Draw(pdfFilePath)
End Sub
Private Function GetImage(ByVal filePath As String) As Byte()
Dim MyInFile As FileStream = New FileStream(filePath, FileMode.Open, FileAccess.Read)
Dim MyBinaryData(MyInFile.Length) As Byte
MyInFile.Read(MyBinaryData, 0, MyInFile.Length)
MyInFile.Close()
return MyBinaryData
End Function
End Module