Introduction to an image metadata
In This Topic
Image metadata store data about image and define such aspects as keywords, GPS location, camera information and more.
The SDK provides the ability to get metadata from image file, edit existing and add new metadata. All these operations are performed without loading of image from file.
The SDK allows to work with the following types of metadata:
- TIFF metadata (TIFF)
- EXIF metadata (TIFF, JPEG, DNG, NRW, CR2, NEF)
- GPS metadata (TIFF, JPEG, DNG, NRW, CR2, NEF)
- Annotations in VintasoftBinary format (TIFF, JPEG, PNG, PDF)
- Annotations in VintasoftXmp format (TIFF, JPEG, PDF)
- Annotations in WANG format (TIFF)
- Text-comments (PNG, GIF)
- Image thumbnail (JPEG, PDF)
- RAW camera metadata (DNG, NRW, CR2, CRW, NEF)
- DICOM metadata (DCM, DIC, ACR)
There are 3 techniques of accessing image metadata:
- Access to the image metadata using the metadata tree, which can be get from VintasoftImage object. This way provides access to the metadata of all image formats supported by SDK (JPEG, TIFF, PDF, etc).
-
Access to the image metadata using properties and methods of class, which is derived from ImageFileBase<T> class. This way provides access to the metadata of all image formats (JPEG, TIFF, etc) supported by SDK, except PDF.
- Access to the PDF document metadata using properties and methods of PdfDocument object.
Access to the metadata of VintasoftImage object
VintasoftImageMetadata class provides simplified access to the image metadata in case when work with image is performed using
VintasoftImage class. Access to an instance of
VintasoftImageMetadata class may be obtained using
VintasoftImage.Metadata property.
VintasoftImageMetadata class provides access to:
- "raw" image annotations
- tree of image metadata
Here is C#/VB.NET code that shows how to obtain information about annotation packets, which are stored in JPEG file metadata:
public void PrintInfoAboutJpegFileAnnotations(string filename)
{
// create an instance of VintasoftImage class
using (Vintasoft.Imaging.VintasoftImage jpegImage = new Vintasoft.Imaging.VintasoftImage(filename))
{
// get reference to a metadata tree of JPEG page
Vintasoft.Imaging.Metadata.MetadataNode jpegPageMetadata = jpegImage.Metadata.MetadataTree;
// create an instance of MetadataTreeHelper class
Vintasoft.Imaging.Metadata.MetadataTreeHelper metadataTreeHelper =
new Vintasoft.Imaging.Metadata.MetadataTreeHelper(jpegPageMetadata);
//
if (!metadataTreeHelper.HasVintasoftBinaryAnnotations &&
!metadataTreeHelper.HasVintasoftXmpAnnotations)
System.Console.Write(string.Format("File '{0}' does not have annotations.", filename));
else
{
if (metadataTreeHelper.HasVintasoftBinaryAnnotations)
System.Console.Write(string.Format("File '{0}' has VintasoftBinary annotations.", filename));
if (metadataTreeHelper.HasVintasoftXmpAnnotations)
System.Console.Write(string.Format("File '{0}' has VintasoftXmp annotations.", filename));
}
}
}
Public Sub PrintInfoAboutJpegFileAnnotations(filename As String)
' create an instance of VintasoftImage class
Using jpegImage As New Vintasoft.Imaging.VintasoftImage(filename)
' get reference to a metadata tree of JPEG page
Dim jpegPageMetadata As Vintasoft.Imaging.Metadata.MetadataNode = jpegImage.Metadata.MetadataTree
' create an instance of MetadataTreeHelper class
Dim metadataTreeHelper As New Vintasoft.Imaging.Metadata.MetadataTreeHelper(jpegPageMetadata)
'
If Not metadataTreeHelper.HasVintasoftBinaryAnnotations AndAlso Not metadataTreeHelper.HasVintasoftXmpAnnotations Then
System.Console.Write(String.Format("File '{0}' does not have annotations.", filename))
Else
If metadataTreeHelper.HasVintasoftBinaryAnnotations Then
System.Console.Write(String.Format("File '{0}' has VintasoftBinary annotations.", filename))
End If
If metadataTreeHelper.HasVintasoftXmpAnnotations Then
System.Console.Write(String.Format("File '{0}' has VintasoftXmp annotations.", filename))
End If
End If
End Using
End Sub
The metadata tree represents the image metadata as a tree structure. Access to the metadata tree can be obtained using
VintasoftImageMetadata.MetadataTree property.
The metadata tree root node represents a page of image file. Each tree node may contain information about image metadata and child nodes.
Here is C#/VB.NET code that shows how to obtain information about tags of TIFF file:
public void PrintInfoAboutTiffFile(string filename)
{
// create an image collection
Vintasoft.Imaging.ImageCollection images = new Vintasoft.Imaging.ImageCollection();
// add TIFF file to a collection
images.Add(filename);
for (int i = 0; i < images.Count; i++)
{
System.Console.WriteLine(string.Format("Page {0}", i));
// get reference to a metadata tree of TIFF page
Vintasoft.Imaging.Metadata.MetadataNode tiffPageMetadata = images[i].Metadata.MetadataTree;
// search for tree node that contains information about TIFF IFD
Vintasoft.Imaging.Metadata.TiffIfdMetadata tiffIfdMetadata =
tiffPageMetadata.FindChildNode<Vintasoft.Imaging.Metadata.TiffIfdMetadata>();
// if tree node that contains information about TIFF IFD is found
if (tiffIfdMetadata != null)
{
// if TIFF IFD is found
if (tiffIfdMetadata.ImageFileDirectory != null)
// print info about TIFF IFD data
PrintInfoAboutTiffIfdData(tiffIfdMetadata.ImageFileDirectory);
}
}
}
private void PrintInfoAboutTiffIfdData(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory ifd)
{
System.Console.WriteLine(" TIFF IFD data:");
// print info about tag collection of EXIF data
PrintTiffTagCollectionInfo(ifd.Tags, " ");
System.Console.WriteLine();
}
private void PrintTiffTagCollectionInfo(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTagCollection tags, string indent)
{
// print tag count
System.Console.WriteLine(string.Format("{0}Tags [{1}]:", indent, tags.Count));
// for each tag
for (int i = 0; i < tags.Count; i++)
{
// print tag info
System.Console.WriteLine(string.Format("{0}- Id={1}, Name={2}, Data={3}", indent, tags[i].Id, tags[i].Name, tags[i].Data));
// if tag data is TiffImageFileDirectory
if (tags[i].Data.GetType() == typeof(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory))
{
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory subIfd =
(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory)tags[i].Data;
// print info about tag collection of sub IFD
PrintTiffTagCollectionInfo(subIfd.Tags, indent + " ");
}
// if tag data is TiffImageFileDirectory[]
if (tags[i].Data.GetType() == typeof(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory[]))
{
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory[] subIfds =
(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory[])tags[i].Data;
for (int j = 0; j < subIfds.Length; j++)
// print info about tag collection of sub IFD
PrintTiffTagCollectionInfo(subIfds[j].Tags, indent + " ");
}
}
}
Public Sub PrintInfoAboutTiffFile(filename As String)
' create an image collection
Dim images As New Vintasoft.Imaging.ImageCollection()
' add TIFF file to a collection
images.Add(filename)
For i As Integer = 0 To images.Count - 1
System.Console.WriteLine(String.Format("Page {0}", i))
' get reference to a metadata tree of TIFF page
Dim tiffPageMetadata As Vintasoft.Imaging.Metadata.MetadataNode = images(i).Metadata.MetadataTree
' search for tree node that contains information about TIFF IFD
Dim tiffIfdMetadata As Vintasoft.Imaging.Metadata.TiffIfdMetadata = tiffPageMetadata.FindChildNode(Of Vintasoft.Imaging.Metadata.TiffIfdMetadata)()
' if tree node that contains information about TIFF IFD is found
If tiffIfdMetadata IsNot Nothing Then
' if TIFF IFD is found
If tiffIfdMetadata.ImageFileDirectory IsNot Nothing Then
' print info about TIFF IFD data
PrintInfoAboutTiffIfdData(tiffIfdMetadata.ImageFileDirectory)
End If
End If
Next
End Sub
Private Sub PrintInfoAboutTiffIfdData(ifd As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory)
System.Console.WriteLine(" TIFF IFD data:")
' print info about tag collection of EXIF data
PrintTiffTagCollectionInfo(ifd.Tags, " ")
System.Console.WriteLine()
End Sub
Private Sub PrintTiffTagCollectionInfo(tags As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTagCollection, indent As String)
' print tag count
System.Console.WriteLine(String.Format("{0}Tags [{1}]:", indent, tags.Count))
' for each tag
For i As Integer = 0 To tags.Count - 1
' print tag info
System.Console.WriteLine(String.Format("{0}- Id={1}, Name={2}, Data={3}", indent, tags(i).Id, tags(i).Name, tags(i).Data))
' if tag data is TiffImageFileDirectory
If tags(i).Data.[GetType]() Is GetType(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory) Then
Dim subIfd As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory = DirectCast(tags(i).Data, Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory)
' print info about tag collection of sub IFD
PrintTiffTagCollectionInfo(subIfd.Tags, indent & " ")
End If
' if tag data is TiffImageFileDirectory[]
If tags(i).Data.[GetType]() Is GetType(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory()) Then
Dim subIfds As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory() = DirectCast(tags(i).Data, Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory())
For j As Integer = 0 To subIfds.Length - 1
' print info about tag collection of sub IFD
PrintTiffTagCollectionInfo(subIfds(j).Tags, indent & " ")
Next
End If
Next
End Sub
Here is C#/VB.NET code that shows how to obtain an EXIF information from JPEG file:
public void PrintExifInfoAboutJpegFile(string filename)
{
// create an instance of VintasoftImage class
using (Vintasoft.Imaging.VintasoftImage jpegImage = new Vintasoft.Imaging.VintasoftImage(filename))
{
// get reference to a metadata tree of JPEG page
Vintasoft.Imaging.Metadata.MetadataNode jpegPageMetadata = jpegImage.Metadata.MetadataTree;
// search for tree node that contains information about JPEG thumbnail
Vintasoft.Imaging.Metadata.JpegApp1ExifSegmentMetadata jpegApp1ExifSegmentMetadata =
jpegPageMetadata.FindChildNode<Vintasoft.Imaging.Metadata.JpegApp1ExifSegmentMetadata>();
// if tree node that contains EXIF information is found
if (jpegApp1ExifSegmentMetadata != null)
{
// if EXIF data is found
if (jpegApp1ExifSegmentMetadata.IFD0 != null)
// print info about EXIF data
PrintInfoAboutExifData(jpegApp1ExifSegmentMetadata.IFD0);
// if EXIF thumbnail data is found
if (jpegApp1ExifSegmentMetadata.IFD1 != null)
// print info about EXIF thumbnail data
PrintInfoAboutExifThumbnailData(jpegApp1ExifSegmentMetadata.IFD1);
// if EXIF thumbnail is found
if (jpegApp1ExifSegmentMetadata.Thumbnail != null)
// print info about EXIF thumbnail
PrintInfoAboutExifThumbnail(jpegApp1ExifSegmentMetadata.Thumbnail);
}
}
}
private void PrintInfoAboutExifData(Vintasoft.Imaging.Metadata.JpegApp1Ifd0Metadata jpegApp1Ifd0Metadata)
{
System.Console.WriteLine("EXIF data:");
// print info about tag collection of EXIF data
PrintExifTagCollectionInfo(jpegApp1Ifd0Metadata.ImageFileDirectory.Tags, " ");
System.Console.WriteLine();
}
private void PrintInfoAboutExifThumbnailData(Vintasoft.Imaging.Metadata.JpegApp1Ifd1Metadata jpegApp1Ifd1Metadata)
{
System.Console.WriteLine("EXIF thumbnail data:");
// print info about tag collection of EXIF thumbnail data
PrintExifTagCollectionInfo(jpegApp1Ifd1Metadata.ImageFileDirectory.Tags, " ");
System.Console.WriteLine();
}
private void PrintInfoAboutExifThumbnail(Vintasoft.Imaging.Metadata.ThumbnailMetadata thumbnailMetadata)
{
System.Console.WriteLine("EXIF thumbnail:");
// print info about EXIF thumbnail
System.Console.WriteLine(string.Format(" Thumbnail size: {0}", thumbnailMetadata.ThumbnailSize));
System.Console.WriteLine();
}
private void PrintExifTagCollectionInfo(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTagCollection tags, string indent)
{
// print tag count
System.Console.WriteLine(string.Format("{0}Tags [{1}]:", indent, tags.Count));
// for each tag
for (int i = 0; i < tags.Count; i++)
{
// print tag info
System.Console.WriteLine(string.Format("{0}- Id={1}, Name={2}, Data={3}", indent, tags[i].Id, tags[i].Name, tags[i].Data));
// if tag data is TiffImageFileDirectory
if (tags[i].Data.GetType() == typeof(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory))
{
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory subIfd =
(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory)tags[i].Data;
// print info about tag collection of sub IFD
PrintExifTagCollectionInfo(subIfd.Tags, indent + " ");
}
// if tag data is TiffImageFileDirectory[]
if (tags[i].Data.GetType() == typeof(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory[]))
{
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory[] subIfds =
(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory[])tags[i].Data;
for (int j = 0; j < subIfds.Length; j++)
// print info about tag collection of sub IFD
PrintExifTagCollectionInfo(subIfds[j].Tags, indent + " ");
}
}
}
Public Sub PrintExifInfoAboutJpegFile(filename As String)
' create an instance of VintasoftImage class
Using jpegImage As New Vintasoft.Imaging.VintasoftImage(filename)
' get reference to a metadata tree of JPEG page
Dim jpegPageMetadata As Vintasoft.Imaging.Metadata.MetadataNode = jpegImage.Metadata.MetadataTree
' search for tree node that contains information about JPEG thumbnail
Dim jpegApp1ExifSegmentMetadata As Vintasoft.Imaging.Metadata.JpegApp1ExifSegmentMetadata = jpegPageMetadata.FindChildNode(Of Vintasoft.Imaging.Metadata.JpegApp1ExifSegmentMetadata)()
' if tree node that contains EXIF information is found
If jpegApp1ExifSegmentMetadata IsNot Nothing Then
' if EXIF data is found
If jpegApp1ExifSegmentMetadata.IFD0 IsNot Nothing Then
' print info about EXIF data
PrintInfoAboutExifData(jpegApp1ExifSegmentMetadata.IFD0)
End If
' if EXIF thumbnail data is found
If jpegApp1ExifSegmentMetadata.IFD1 IsNot Nothing Then
' print info about EXIF thumbnail data
PrintInfoAboutExifThumbnailData(jpegApp1ExifSegmentMetadata.IFD1)
End If
' if EXIF thumbnail is found
If jpegApp1ExifSegmentMetadata.Thumbnail IsNot Nothing Then
' print info about EXIF thumbnail
PrintInfoAboutExifThumbnail(jpegApp1ExifSegmentMetadata.Thumbnail)
End If
End If
End Using
End Sub
Private Sub PrintInfoAboutExifData(jpegApp1Ifd0Metadata As Vintasoft.Imaging.Metadata.JpegApp1Ifd0Metadata)
System.Console.WriteLine("EXIF data:")
' print info about tag collection of EXIF data
PrintExifTagCollectionInfo(jpegApp1Ifd0Metadata.ImageFileDirectory.Tags, " ")
System.Console.WriteLine()
End Sub
Private Sub PrintInfoAboutExifThumbnailData(jpegApp1Ifd1Metadata As Vintasoft.Imaging.Metadata.JpegApp1Ifd1Metadata)
System.Console.WriteLine("EXIF thumbnail data:")
' print info about tag collection of EXIF thumbnail data
PrintExifTagCollectionInfo(jpegApp1Ifd1Metadata.ImageFileDirectory.Tags, " ")
System.Console.WriteLine()
End Sub
Private Sub PrintInfoAboutExifThumbnail(thumbnailMetadata As Vintasoft.Imaging.Metadata.ThumbnailMetadata)
System.Console.WriteLine("EXIF thumbnail:")
' print info about EXIF thumbnail
System.Console.WriteLine(String.Format(" Thumbnail size: {0}", thumbnailMetadata.ThumbnailSize))
System.Console.WriteLine()
End Sub
Private Sub PrintExifTagCollectionInfo(tags As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTagCollection, indent As String)
' print tag count
System.Console.WriteLine(String.Format("{0}Tags [{1}]:", indent, tags.Count))
' for each tag
For i As Integer = 0 To tags.Count - 1
' print tag info
System.Console.WriteLine(String.Format("{0}- Id={1}, Name={2}, Data={3}", indent, tags(i).Id, tags(i).Name, tags(i).Data))
' if tag data is TiffImageFileDirectory
If tags(i).Data.[GetType]() Is GetType(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory) Then
Dim subIfd As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory = DirectCast(tags(i).Data, Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory)
' print info about tag collection of sub IFD
PrintExifTagCollectionInfo(subIfd.Tags, indent & " ")
End If
' if tag data is TiffImageFileDirectory[]
If tags(i).Data.[GetType]() Is GetType(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory()) Then
Dim subIfds As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory() = DirectCast(tags(i).Data, Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory())
For j As Integer = 0 To subIfds.Length - 1
' print info about tag collection of sub IFD
PrintExifTagCollectionInfo(subIfds(j).Tags, indent & " ")
Next
End If
Next
End Sub
Here is C#/VB.NET code that shows how to change a GPS information in JPEG file:
public void ChangeGpsInfoAboutJpegFile(string filename)
{
// open a file stream in read-write mode
using (System.IO.FileStream fs = new System.IO.FileStream(
filename, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite))
{
// create an instance of VintasoftImage class
using (Vintasoft.Imaging.VintasoftImage jpegImage = new Vintasoft.Imaging.VintasoftImage(fs))
{
// get reference to a metadata tree of JPEG page
Vintasoft.Imaging.Metadata.MetadataNode jpegPageMetadata = jpegImage.Metadata.MetadataTree;
// search for tree node that contains information about JPEG thumbnail
Vintasoft.Imaging.Metadata.JpegApp1ExifSegmentMetadata jpegApp1ExifSegmentMetadata =
jpegPageMetadata.FindChildNode<Vintasoft.Imaging.Metadata.JpegApp1ExifSegmentMetadata>();
// if tree node that contains information about JPEG thumbnail is found
if (jpegApp1ExifSegmentMetadata != null)
{
// if EXIF data is found
if (jpegApp1ExifSegmentMetadata.IFD0 != null)
{
// if GPS info is not found
if (jpegApp1ExifSegmentMetadata.IFD0.GpsIFD == null)
// create node that contains GPS info
jpegApp1ExifSegmentMetadata.IFD0.CreateGpsIFD();
// get reference to a GPS IFD
Vintasoft.Imaging.Metadata.TiffIfdMetadata gpsIfd = jpegApp1ExifSegmentMetadata.IFD0.GpsIFD;
// search for tag that contains info about GPS date stamp
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTag gpsDateStampTag =
gpsIfd.ImageFileDirectory.Tags.Find((ushort)Vintasoft.Imaging.Codecs.ImageFiles.Tiff.ExifGpsTagId.GPSDateStamp);
// if tag that contains info about GPS date stamp is found
if (gpsDateStampTag != null)
// change the tag data
gpsDateStampTag.Data = System.DateTime.Now.ToString();
// if tag that contains info about GPS date stamp is not found
else
// add the GPS date stamp
gpsIfd.ImageFileDirectory.Tags.Add(
(ushort)Vintasoft.Imaging.Codecs.ImageFiles.Tiff.ExifGpsTagId.GPSDateStamp,
System.DateTime.Now.ToString());
// create an encoder for image saving
Vintasoft.Imaging.Codecs.Encoders.JpegEncoder encoder = new Vintasoft.Imaging.Codecs.Encoders.JpegEncoder();
encoder.SaveAndSwitchSource = true;
// save changes to the source stream
jpegImage.Save(fs, encoder);
}
}
}
}
}
Public Sub ChangeGpsInfoAboutJpegFile(filename As String)
' open a file stream in read-write mode
Using fs As New System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite)
' create an instance of VintasoftImage class
Using jpegImage As New Vintasoft.Imaging.VintasoftImage(fs)
' get reference to a metadata tree of JPEG page
Dim jpegPageMetadata As Vintasoft.Imaging.Metadata.MetadataNode = jpegImage.Metadata.MetadataTree
' search for tree node that contains information about JPEG thumbnail
Dim jpegApp1ExifSegmentMetadata As Vintasoft.Imaging.Metadata.JpegApp1ExifSegmentMetadata = jpegPageMetadata.FindChildNode(Of Vintasoft.Imaging.Metadata.JpegApp1ExifSegmentMetadata)()
' if tree node that contains information about JPEG thumbnail is found
If jpegApp1ExifSegmentMetadata IsNot Nothing Then
' if EXIF data is found
If jpegApp1ExifSegmentMetadata.IFD0 IsNot Nothing Then
' if GPS info is not found
If jpegApp1ExifSegmentMetadata.IFD0.GpsIFD Is Nothing Then
' create node that contains GPS info
jpegApp1ExifSegmentMetadata.IFD0.CreateGpsIFD()
End If
' get reference to a GPS IFD
Dim gpsIfd As Vintasoft.Imaging.Metadata.TiffIfdMetadata = jpegApp1ExifSegmentMetadata.IFD0.GpsIFD
' search for tag that contains info about GPS date stamp
Dim gpsDateStampTag As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTag = gpsIfd.ImageFileDirectory.Tags.Find(CUShort(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.ExifGpsTagId.GPSDateStamp))
' if tag that contains info about GPS date stamp is found
If gpsDateStampTag IsNot Nothing Then
' change the tag data
gpsDateStampTag.Data = System.DateTime.Now.ToString()
Else
' if tag that contains info about GPS date stamp is not found
' add the GPS date stamp
gpsIfd.ImageFileDirectory.Tags.Add(CUShort(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.ExifGpsTagId.GPSDateStamp), System.DateTime.Now.ToString())
End If
' create an encoder for image saving
Dim encoder As New Vintasoft.Imaging.Codecs.Encoders.JpegEncoder()
encoder.SaveAndSwitchSource = True
' save changes to the source stream
jpegImage.Save(fs, encoder)
End If
End If
End Using
End Using
End Sub
Here is C#/VB.NET code that shows how to get thumbnail from JPEG file:
public Vintasoft.Imaging.VintasoftImage GetJpegThumbnail(string filename)
{
// create an instance of VintasoftImage class
using (Vintasoft.Imaging.VintasoftImage jpegImage =
new Vintasoft.Imaging.VintasoftImage(filename))
{
// get reference to a metadata tree of JPEG page
Vintasoft.Imaging.Metadata.MetadataNode jpegPageMetadata = jpegImage.Metadata.MetadataTree;
// search for tree node that contains information about JPEG thumbnail
Vintasoft.Imaging.Metadata.JpegApp1ThumbnailMetadata jpegThumbnailMetadata =
jpegPageMetadata.FindChildNode<Vintasoft.Imaging.Metadata.JpegApp1ThumbnailMetadata>();
// if tree node that contains information about JPEG thumbnail is found
if (jpegThumbnailMetadata != null)
// return thumbnail of JPEG page
return jpegThumbnailMetadata.ThumbnailImage;
// JPEG page does not have thumbnail
return null;
}
}
Public Function GetJpegThumbnail(filename As String) As Vintasoft.Imaging.VintasoftImage
' create an instance of VintasoftImage class
Using jpegImage As New Vintasoft.Imaging.VintasoftImage(filename)
' get reference to a metadata tree of JPEG page
Dim jpegPageMetadata As Vintasoft.Imaging.Metadata.MetadataNode = jpegImage.Metadata.MetadataTree
' search for tree node that contains information about JPEG thumbnail
Dim jpegThumbnailMetadata As Vintasoft.Imaging.Metadata.JpegApp1ThumbnailMetadata = jpegPageMetadata.FindChildNode(Of Vintasoft.Imaging.Metadata.JpegApp1ThumbnailMetadata)()
' if tree node that contains information about JPEG thumbnail is found
If jpegThumbnailMetadata IsNot Nothing Then
' return thumbnail of JPEG page
Return jpegThumbnailMetadata.ThumbnailImage
End If
' JPEG page does not have thumbnail
Return Nothing
End Using
End Function
Access to the metadata of class instance, which is derived from ImageFile class
ImageFileBase<T> class is an abstract class providing access to an image file. For each of supported image file format exist a class derived from
ImageFileBase<T> class, notably:
Metadata of image file can be obtained using properties and methods of instance of class, which is derived from
ImageFileBase<T> class. Also the instance of class, which is derived from
ImageFileBase<T> class, provides access to the file pages.
Here is C#/VB.NET code that shows how to obtain format and version of TIFF file:
public void PrintInfoAboutTiffFileFormatAndVersion(string filename)
{
// create an instance of TiffFile class
using (Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffFile tiffFile =
new Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffFile(filename))
{
System.Console.WriteLine(string.Format("TIFF Format={0} Version={1}", tiffFile.Format, tiffFile.Version));
}
}
Public Sub PrintInfoAboutTiffFileFormatAndVersion(filename As String)
' create an instance of TiffFile class
Using tiffFile As New Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffFile(filename)
System.Console.WriteLine(String.Format("TIFF Format={0} Version={1}", tiffFile.Format, tiffFile.Version))
End Using
End Sub
ImagePage class is an abstract class providing access to an image page. For each of supported image file format exist a class, which is derived from
ImagePage class, notably:
Metadata of image page can be obtained using properties and methods of instance of class, which is derived from
ImagePage class.
Here is C#/VB.NET code that shows how to obtain information about tags of TIFF file:
public void PrintInfoAboutTiffFile(string filename)
{
// create an instance of TiffFile class
using (Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffFile tiffFile =
new Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffFile(filename))
{
// for each TIFF page
for (int i = 0; i < tiffFile.Pages.Count; i++)
{
System.Console.WriteLine(string.Format("Page {0}", i));
// print info about TIFF IFD data
PrintInfoAboutTiffIfdData(tiffFile.Pages[0].IFD);
}
}
}
private void PrintInfoAboutTiffIfdData(
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory ifd)
{
System.Console.WriteLine(" TIFF IFD data:");
// print info about tag collection of EXIF data
PrintTiffTagCollectionInfo(ifd.Tags, " ");
System.Console.WriteLine();
}
private void PrintTiffTagCollectionInfo(
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTagCollection tags, string indent)
{
// print tag count
System.Console.WriteLine(string.Format("{0}Tags [{1}]:", indent, tags.Count));
// for each tag
for (int i = 0; i < tags.Count; i++)
{
// print tag info
System.Console.WriteLine(string.Format("{0}- Id={1}, Name={2}, Data={3}", indent, tags[i].Id, tags[i].Name, tags[i].Data));
// if tag data is TiffImageFileDirectory
if (tags[i].Data.GetType() == typeof(
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory))
{
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory subIfd =
(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory)tags[i].Data;
// print info about tag collection of sub IFD
PrintTiffTagCollectionInfo(subIfd.Tags, indent + " ");
}
// if tag data is TiffImageFileDirectory[]
if (tags[i].Data.GetType() == typeof(
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory[]))
{
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory[] subIfds =
(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory[])tags[i].Data;
for (int j = 0; j < subIfds.Length; j++)
// print info about tag collection of sub IFD
PrintTiffTagCollectionInfo(subIfds[j].Tags, indent + " ");
}
}
}
Public Sub PrintInfoAboutTiffFile(filename As String)
' create an instance of TiffFile class
Using tiffFile As New Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffFile(filename)
' for each TIFF page
For i As Integer = 0 To tiffFile.Pages.Count - 1
System.Console.WriteLine(String.Format("Page {0}", i))
' print info about TIFF IFD data
PrintInfoAboutTiffIfdData(tiffFile.Pages(0).IFD)
Next
End Using
End Sub
Private Sub PrintInfoAboutTiffIfdData(ifd As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory)
System.Console.WriteLine(" TIFF IFD data:")
' print info about tag collection of EXIF data
PrintTiffTagCollectionInfo(ifd.Tags, " ")
System.Console.WriteLine()
End Sub
Private Sub PrintTiffTagCollectionInfo(tags As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTagCollection, indent As String)
' print tag count
System.Console.WriteLine(String.Format("{0}Tags [{1}]:", indent, tags.Count))
' for each tag
For i As Integer = 0 To tags.Count - 1
' print tag info
System.Console.WriteLine(String.Format("{0}- Id={1}, Name={2}, Data={3}", indent, tags(i).Id, tags(i).Name, tags(i).Data))
' if tag data is TiffImageFileDirectory
If tags(i).Data.[GetType]() Is GetType(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory) Then
Dim subIfd As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory = DirectCast(tags(i).Data, Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory)
' print info about tag collection of sub IFD
PrintTiffTagCollectionInfo(subIfd.Tags, indent & " ")
End If
' if tag data is TiffImageFileDirectory[]
If tags(i).Data.[GetType]() Is GetType(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory()) Then
Dim subIfds As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory() = DirectCast(tags(i).Data, Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory())
For j As Integer = 0 To subIfds.Length - 1
' print info about tag collection of sub IFD
PrintTiffTagCollectionInfo(subIfds(j).Tags, indent & " ")
Next
End If
Next
End Sub
Here is C#/VB.NET code that shows how to obtain an EXIF information from JPEG file:
public void PrintExifInfoAboutJpegFile(string filename)
{
// create an instance of JpegFile class
using (Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.JpegFile jpegFile =
new Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.JpegFile(filename))
{
// if JPEG page contains EXIF information
if (jpegFile.Page.Exif != null)
{
Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.ExifData exifData = jpegFile.Page.Exif;
// if EXIF data is found
if (exifData.ImageFileDirectory != null)
// print info about EXIF data
PrintInfoAboutExifData(exifData.ImageFileDirectory);
// if EXIF thumbnail data is found
if (exifData.ThumbnailFileDirectory != null)
// print info about EXIF thumbnail data
PrintInfoAboutExifThumbnailData(exifData.ThumbnailFileDirectory);
// if EXIF thumbnail is found
if (exifData.HasThumbnail)
// print info about EXIF thumbnail
PrintInfoAboutExifThumbnail(exifData);
}
}
}
private void PrintInfoAboutExifData(
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory exifDataIfd)
{
System.Console.WriteLine("EXIF data:");
// print info about tag collection of EXIF data
PrintExifTagCollectionInfo(exifDataIfd.Tags, " ");
System.Console.WriteLine();
}
private void PrintInfoAboutExifThumbnailData(
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory exifThumbnailDataIfd)
{
System.Console.WriteLine("EXIF thumbnail data:");
// print info about tag collection of EXIF thumbnail data
PrintExifTagCollectionInfo(exifThumbnailDataIfd.Tags, " ");
System.Console.WriteLine();
}
private void PrintInfoAboutExifThumbnail(
Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.ExifData exifData)
{
System.Console.WriteLine("EXIF thumbnail:");
using (Vintasoft.Imaging.VintasoftImage thumbnailImage = exifData.GetThumbnail())
{
// print info about EXIF thumbnail
System.Console.WriteLine(string.Format(" Thumbnail size: {0}x{1}", thumbnailImage.Width, thumbnailImage.Height));
}
System.Console.WriteLine();
}
private void PrintExifTagCollectionInfo(
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTagCollection tags, string indent)
{
// print tag count
System.Console.WriteLine(string.Format("{0}Tags [{1}]:", indent, tags.Count));
// for each tag
for (int i = 0; i < tags.Count; i++)
{
// print tag info
System.Console.WriteLine(string.Format("{0}- Id={1}, Name={2}, Data={3}", indent, tags[i].Id, tags[i].Name, tags[i].Data));
// if tag data is TiffImageFileDirectory
if (tags[i].Data.GetType() == typeof(
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory))
{
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory subIfd =
(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory)tags[i].Data;
// print info about tag collection of sub IFD
PrintExifTagCollectionInfo(subIfd.Tags, indent + " ");
}
// if tag data is TiffImageFileDirectory[]
if (tags[i].Data.GetType() == typeof(
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory[]))
{
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory[] subIfds =
(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory[])tags[i].Data;
for (int j = 0; j < subIfds.Length; j++)
// print info about tag collection of sub IFD
PrintExifTagCollectionInfo(subIfds[j].Tags, indent + " ");
}
}
}
Public Sub PrintExifInfoAboutJpegFile(filename As String)
' create an instance of JpegFile class
Using jpegFile As New Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.JpegFile(filename)
' if JPEG page contains EXIF information
If jpegFile.Page.Exif IsNot Nothing Then
Dim exifData As Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.ExifData = jpegFile.Page.Exif
' if EXIF data is found
If exifData.ImageFileDirectory IsNot Nothing Then
' print info about EXIF data
PrintInfoAboutExifData(exifData.ImageFileDirectory)
End If
' if EXIF thumbnail data is found
If exifData.ThumbnailFileDirectory IsNot Nothing Then
' print info about EXIF thumbnail data
PrintInfoAboutExifThumbnailData(exifData.ThumbnailFileDirectory)
End If
' if EXIF thumbnail is found
If exifData.HasThumbnail Then
' print info about EXIF thumbnail
PrintInfoAboutExifThumbnail(exifData)
End If
End If
End Using
End Sub
Private Sub PrintInfoAboutExifData(exifDataIfd As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory)
System.Console.WriteLine("EXIF data:")
' print info about tag collection of EXIF data
PrintExifTagCollectionInfo(exifDataIfd.Tags, " ")
System.Console.WriteLine()
End Sub
Private Sub PrintInfoAboutExifThumbnailData(exifThumbnailDataIfd As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory)
System.Console.WriteLine("EXIF thumbnail data:")
' print info about tag collection of EXIF thumbnail data
PrintExifTagCollectionInfo(exifThumbnailDataIfd.Tags, " ")
System.Console.WriteLine()
End Sub
Private Sub PrintInfoAboutExifThumbnail(exifData As Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.ExifData)
System.Console.WriteLine("EXIF thumbnail:")
Using thumbnailImage As Vintasoft.Imaging.VintasoftImage = exifData.GetThumbnail()
' print info about EXIF thumbnail
System.Console.WriteLine(String.Format(" Thumbnail size: {0}x{1}", thumbnailImage.Width, thumbnailImage.Height))
End Using
System.Console.WriteLine()
End Sub
Private Sub PrintExifTagCollectionInfo(tags As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTagCollection, indent As String)
' print tag count
System.Console.WriteLine(String.Format("{0}Tags [{1}]:", indent, tags.Count))
' for each tag
For i As Integer = 0 To tags.Count - 1
' print tag info
System.Console.WriteLine(String.Format("{0}- Id={1}, Name={2}, Data={3}", indent, tags(i).Id, tags(i).Name, tags(i).Data))
' if tag data is TiffImageFileDirectory
If tags(i).Data.[GetType]() Is GetType(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory) Then
Dim subIfd As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory = DirectCast(tags(i).Data, Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory)
' print info about tag collection of sub IFD
PrintExifTagCollectionInfo(subIfd.Tags, indent & " ")
End If
' if tag data is TiffImageFileDirectory[]
If tags(i).Data.[GetType]() Is GetType(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory()) Then
Dim subIfds As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory() = DirectCast(tags(i).Data, Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffImageFileDirectory())
For j As Integer = 0 To subIfds.Length - 1
' print info about tag collection of sub IFD
PrintExifTagCollectionInfo(subIfds(j).Tags, indent & " ")
Next
End If
Next
End Sub
Here is C#/VB.NET code that shows how to change a GPS information in JPEG file:
public void ChangeGpsInfoAboutJpegFile(string filename)
{
// create an instance of JpegFile class
using (Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.JpegFile jpegFile =
new Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.JpegFile(filename))
{
// if JPEG page contains EXIF information
if (jpegFile.Page.Exif != null)
{
Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.ExifData exifData = jpegFile.Page.Exif;
// if EXIF data is found
if (exifData.ImageFileDirectory != null)
{
// if GPS info is not found
if (exifData.ImageFileDirectory.GpsTags == null)
// create tag collection that contains GPS info
exifData.ImageFileDirectory.GpsTags =
new Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTagCollection();
// get reference to a GPS tags
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTagCollection gpsTags =
exifData.ImageFileDirectory.GpsTags;
// search for tag that contains info about GPS date stamp
Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTag gpsDateStampTag =
gpsTags.Find((ushort)Vintasoft.Imaging.Codecs.ImageFiles.Tiff.ExifGpsTagId.GPSDateStamp);
// if tag that contains info about GPS date stamp is found
if (gpsDateStampTag != null)
// change the tag data
gpsDateStampTag.Data = System.DateTime.Now.ToString();
// if tag that contains info about GPS date stamp is not found
else
// add the GPS date stamp
gpsTags.Add((ushort)Vintasoft.Imaging.Codecs.ImageFiles.Tiff.ExifGpsTagId.GPSDateStamp,
System.DateTime.Now.ToString());
// save changes to the source file
jpegFile.SaveChanges();
}
}
}
}
Public Sub ChangeGpsInfoAboutJpegFile(filename As String)
' create an instance of JpegFile class
Using jpegFile As New Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.JpegFile(filename)
' if JPEG page contains EXIF information
If jpegFile.Page.Exif IsNot Nothing Then
Dim exifData As Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.ExifData = jpegFile.Page.Exif
' if EXIF data is found
If exifData.ImageFileDirectory IsNot Nothing Then
' if GPS info is not found
If exifData.ImageFileDirectory.GpsTags Is Nothing Then
' create tag collection that contains GPS info
exifData.ImageFileDirectory.GpsTags = New Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTagCollection()
End If
' get reference to a GPS tags
Dim gpsTags As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTagCollection = exifData.ImageFileDirectory.GpsTags
' search for tag that contains info about GPS date stamp
Dim gpsDateStampTag As Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffTag = gpsTags.Find(CUShort(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.ExifGpsTagId.GPSDateStamp))
' if tag that contains info about GPS date stamp is found
If gpsDateStampTag IsNot Nothing Then
' change the tag data
gpsDateStampTag.Data = System.DateTime.Now.ToString()
Else
' if tag that contains info about GPS date stamp is not found
' add the GPS date stamp
gpsTags.Add(CUShort(Vintasoft.Imaging.Codecs.ImageFiles.Tiff.ExifGpsTagId.GPSDateStamp), System.DateTime.Now.ToString())
End If
' save changes to the source file
jpegFile.SaveChanges()
End If
End If
End Using
End Sub
Here is C#/VB.NET code that shows how to get thumbnail from JPEG file:
public Vintasoft.Imaging.VintasoftImage GetJpegThumbnail(string filename)
{
// create an instance of JpegFile class
using (Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.JpegFile jpegFile =
new Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.JpegFile(filename))
{
// if JPEG page contains EXIF information
if (jpegFile.Page.Exif != null)
{
Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.ExifData exifData = jpegFile.Page.Exif;
// if EXIF thumbnail is found
if (exifData.HasThumbnail)
// return thumbnail of JPEG page
return exifData.GetThumbnail();
}
// JPEG page does not have thumbnail
return null;
}
}
Public Function GetJpegThumbnail(filename As String) As Vintasoft.Imaging.VintasoftImage
' create an instance of JpegFile class
Using jpegFile As New Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.JpegFile(filename)
' if JPEG page contains EXIF information
If jpegFile.Page.Exif IsNot Nothing Then
Dim exifData As Vintasoft.Imaging.Codecs.ImageFiles.Jpeg.ExifData = jpegFile.Page.Exif
' if EXIF thumbnail is found
If exifData.HasThumbnail Then
' return thumbnail of JPEG page
Return exifData.GetThumbnail()
End If
End If
' JPEG page does not have thumbnail
Return Nothing
End Using
End Function
Access to the metadata of PdfDocument object
PdfDocument class provides access to a PDF document. Metadata of PDF document can be obtained using properties and methods of
PdfDocument object. Also the
PdfDocument object provides access to the PDF file pages.
Here is C#/VB.NET code that shows how to obtain information about PDF document:
public void GetPdfDocumentInfo(string filename)
{
// create an instance of PdfDocument class
using (Vintasoft.Imaging.Pdf.PdfDocument pdfDocument =
new Vintasoft.Imaging.Pdf.PdfDocument(filename))
{
System.Console.WriteLine(string.Format("PDF document: '{0}'", filename));
Vintasoft.Imaging.Pdf.Tree.PdfDocumentInformation documentInformation = pdfDocument.DocumentInformation;
System.Console.WriteLine(string.Format(" Creator: {0}", documentInformation.Creator));
System.Console.WriteLine(string.Format(" Producer: {0}", documentInformation.Producer));
System.Console.WriteLine(string.Format(" Creation date: {0}", documentInformation.CreationDate));
System.Console.WriteLine(string.Format(" Last modification date: {0}", documentInformation.ModifyDate));
System.Console.WriteLine(string.Format(" Author: {0}", documentInformation.Author));
System.Console.WriteLine(string.Format(" Title: {0}", documentInformation.Title));
System.Console.WriteLine(string.Format(" Subject: {0}", documentInformation.Subject));
System.Console.WriteLine(string.Format(" Keywords: {0}", documentInformation.Keywords));
}
}
Public Sub GetPdfDocumentInfo(filename As String)
' create an instance of PdfDocument class
Using pdfDocument As New Vintasoft.Imaging.Pdf.PdfDocument(filename)
System.Console.WriteLine(String.Format("PDF document: '{0}'", filename))
Dim documentInformation As Vintasoft.Imaging.Pdf.Tree.PdfDocumentInformation = pdfDocument.DocumentInformation
System.Console.WriteLine(String.Format(" Creator: {0}", documentInformation.Creator))
System.Console.WriteLine(String.Format(" Producer: {0}", documentInformation.Producer))
System.Console.WriteLine(String.Format(" Creation date: {0}", documentInformation.CreationDate))
System.Console.WriteLine(String.Format(" Last modification date: {0}", documentInformation.ModifyDate))
System.Console.WriteLine(String.Format(" Author: {0}", documentInformation.Author))
System.Console.WriteLine(String.Format(" Title: {0}", documentInformation.Title))
System.Console.WriteLine(String.Format(" Subject: {0}", documentInformation.Subject))
System.Console.WriteLine(String.Format(" Keywords: {0}", documentInformation.Keywords))
End Using
End Sub
PdfPage class provides access to a page of PDF document. The metadata of PDF page can be obtained using properties and methods of
PdfPage object.
Here is C#/VB.NET code that shows how to get size of PDF document page:
public System.Drawing.SizeF GetFirstPdfPageSize(string filename)
{
// create an instance of PdfDocument class
using (Vintasoft.Imaging.Pdf.PdfDocument pdfDocument =
new Vintasoft.Imaging.Pdf.PdfDocument(filename))
{
if (pdfDocument.Pages.Count == 0)
return System.Drawing.SizeF.Empty;
return pdfDocument.Pages[0].Size;
}
}
Public Function GetFirstPdfPageSize(filename As String) As System.Drawing.SizeF
' create an instance of PdfDocument class
Using pdfDocument As New Vintasoft.Imaging.Pdf.PdfDocument(filename)
If pdfDocument.Pages.Count = 0 Then
Return System.Drawing.SizeF.Empty
End If
Return pdfDocument.Pages(0).Size
End Using
End Function
Here is C#/VB.NET code that shows how to get thumbnail of PDF document page:
public Vintasoft.Imaging.VintasoftImage GetFirstPdfPageThumbnail(string filename)
{
// create an instance of PdfDocument class
using (Vintasoft.Imaging.Pdf.PdfDocument pdfDocument =
new Vintasoft.Imaging.Pdf.PdfDocument(filename))
{
if (pdfDocument.Pages.Count == 0)
return null;
return pdfDocument.Pages[0].GetThumbnail(100, 100);
}
}
Public Function GetFirstPdfPageThumbnail(filename As String) As Vintasoft.Imaging.VintasoftImage
' create an instance of PdfDocument class
Using pdfDocument As New Vintasoft.Imaging.Pdf.PdfDocument(filename)
If pdfDocument.Pages.Count = 0 Then
Return Nothing
End If
Return pdfDocument.Pages(0).GetThumbnail(100, 100)
End Using
End Function