Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(VB.NET) Extract XMP MetaData as XMLDemonstrates how to open a JPG or TIF image file and extract the XMP metadata as XML.
' This requires the Chilkat API to have been previously unlocked. ' See Global Unlock Sample for sample code. Dim xmp As New Chilkat.Xmp ' Load a JPG or TIF image file. ' Sample JPG's with XMP metadata may be found at: ' https://www.chilkatsoft.com/testData/xmp/sample1.jpg ' https://www.chilkatsoft.com/testData/xmp/sample2.jpg ' https://www.chilkatsoft.com/testData/xmp/sample3.jpg Dim success As Boolean = xmp.LoadAppFile("qa_data/xmp/sample1.jpg") If (success <> True) Then Debug.WriteLine(xmp.LastErrorText) Exit Sub End If Debug.WriteLine("Num embedded XMP docs: " & xmp.NumEmbedded) ' Assuming there is at least one, get the 1st. ' (There is typically never more than one, but theoretically it's possible.) Dim xml As Chilkat.Xml = xmp.GetEmbedded(0) If (xmp.LastMethodSuccess = False) Then Debug.WriteLine("No XMP metadata found.") Exit Sub End If Debug.WriteLine(xml.GetXml()) ' Sample output: ' <?xml version="1.0" encoding="utf-8"?> ' <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP toolkit 3.0-28, framework 1.6"> ' <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:iX="http://ns.adobe.com/iX/1.0/"> ' <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:xmpPLUS="XMP Photographic Licensing Universal System (xmpPLUS, http://ns.adobe.com/xap/1.0/PLUS/)"> ' <xmpPLUS:CreditLineReq>False</xmpPLUS:CreditLineReq> ' <xmpPLUS:ReuseAllowed>False</xmpPLUS:ReuseAllowed> ' </rdf:Description> ' <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/"> ' <Iptc4xmpCore:IntellectualGenre>Profile</Iptc4xmpCore:IntellectualGenre> ' <Iptc4xmpCore:Location>Lake Superior</Iptc4xmpCore:Location> ' <Iptc4xmpCore:CountryCode>US</Iptc4xmpCore:CountryCode> ' <Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource"> ' <Iptc4xmpCore:CiAdrExtadr>John Doe Photography, 123 Maple Lane</Iptc4xmpCore:CiAdrExtadr> ' <Iptc4xmpCore:CiAdrCity>Champaign</Iptc4xmpCore:CiAdrCity> ' <Iptc4xmpCore:CiAdrRegion>Illinois</Iptc4xmpCore:CiAdrRegion> ' <Iptc4xmpCore:CiAdrPcode>61820</Iptc4xmpCore:CiAdrPcode> ' <Iptc4xmpCore:CiAdrCtry>USA</Iptc4xmpCore:CiAdrCtry> ' <Iptc4xmpCore:CiTelWork>+1 (217) 1234567</Iptc4xmpCore:CiTelWork> ' <Iptc4xmpCore:CiEmailWork>john@doe.com</Iptc4xmpCore:CiEmailWork> ' <Iptc4xmpCore:CiUrlWork>www.doe.com</Iptc4xmpCore:CiUrlWork> ' </Iptc4xmpCore:CreatorContactInfo> ' <Iptc4xmpCore:SubjectCode> ' <rdf:Bag> ' <rdf:li>14024001</rdf:li> ' </rdf:Bag> ' </Iptc4xmpCore:SubjectCode> ' <Iptc4xmpCore:Scene> ' <rdf:Bag> ' <rdf:li>012300</rdf:li> ' </rdf:Bag> ' </Iptc4xmpCore:Scene> ' </rdf:Description> ' <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:exif="http://ns.adobe.com/exif/1.0/"> ' <exif:ColorSpace>1</exif:ColorSpace> ' <exif:PixelXDimension>288</exif:PixelXDimension> ' <exif:PixelYDimension>432</exif:PixelYDimension> ' </rdf:Description> ' <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"/> ' <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"> ' <photoshop:AuthorsPosition>Photographer</photoshop:AuthorsPosition> ' <photoshop:Headline>Young boy yelling</photoshop:Headline> ' <photoshop:CaptionWriter>John Doe</photoshop:CaptionWriter> ' <photoshop:DateCreated>2004-08-19</photoshop:DateCreated> ' <photoshop:City>Marquette</photoshop:City> ' <photoshop:State>Michigan</photoshop:State> ' <photoshop:Country>United States</photoshop:Country> ' <photoshop:TransmissionReference>PO 34567</photoshop:TransmissionReference> ' <photoshop:Instructions>Original RAW capture Nikon D2X, Adobe RGB 1998.</photoshop:Instructions> ' <photoshop:Credit>John Doe Photography</photoshop:Credit> ' <photoshop:Source>John Doe Photography</photoshop:Source> ' <photoshop:History/> ' </rdf:Description> ' <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"> ' <tiff:XResolution>72/1</tiff:XResolution> ' <tiff:YResolution>72/1</tiff:YResolution> ' <tiff:ResolutionUnit>2</tiff:ResolutionUnit> ' <tiff:Orientation>1</tiff:Orientation> ' </rdf:Description> ' <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:xap="http://ns.adobe.com/xap/1.0/"> ' <xap:CreateDate>2005-03-13T02:02:29-06:00</xap:CreateDate> ' <xap:ModifyDate>2005-03-13T02:02:29-06:00</xap:ModifyDate> ' <xap:MetadataDate>2005-03-13T02:02:29-06:00</xap:MetadataDate> ' <xap:CreatorTool>Adobe Photoshop CS Windows</xap:CreatorTool> ' </rdf:Description> ' <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"> ' <xapMM:DerivedFrom rdf:parseType="Resource"> ' <stRef:instanceID>uuid:f5b64171-9394-11d9-bb8e-a67e6693b6e9</stRef:instanceID> ' <stRef:documentID>adobe:docid:photoshop:e4d002a4-9392-11d9-bb8e-a67e6693b6e9</stRef:documentID> ' </xapMM:DerivedFrom> ' <xapMM:DocumentID>adobe:docid:photoshop:0f410647-9396-11d9-bb8e-a67e6693b6e9</xapMM:DocumentID> ' </rdf:Description> ' <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:xapRights="http://ns.adobe.com/xap/1.0/rights/"> ' <xapRights:Marked>True</xapRights:Marked> ' <xapRights:WebStatement>http://www.doe.com</xapRights:WebStatement> ' <xapRights:RightsUsageTerms> ' <rdf:Alt> ' <rdf:li xml:lang="x-default">For consideration only, no reproduction without prior permission</rdf:li> ' </rdf:Alt> ' </xapRights:RightsUsageTerms> ' <xapRights:UsageTerms> ' <rdf:Alt> ' <rdf:li xml:lang="x-default">For consideration only, no reproduction without prior permission</rdf:li> ' </rdf:Alt> ' </xapRights:UsageTerms> ' </rdf:Description> ' <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:dc="http://purl.org/dc/elements/1.1/"> ' <dc:format>image/jpeg</dc:format> ' <dc:description> ' <rdf:Alt> ' <rdf:li xml:lang="x-default">Three year old African American boy yells with joy on beach during vacation.</rdf:li> ' </rdf:Alt> ' </dc:description> ' <dc:title> ' <rdf:Alt> ' <rdf:li xml:lang="x-default">20040819_pe_014578d.nef</rdf:li> ' </rdf:Alt> ' </dc:title> ' <dc:rights> ' <rdf:Alt> ' <rdf:li xml:lang="x-default">2004 John Doe, all rights reserved</rdf:li> ' </rdf:Alt> ' </dc:rights> ' <dc:creator> ' <rdf:Seq> ' <rdf:li>John Doe</rdf:li> ' </rdf:Seq> ' </dc:creator> ' <dc:subject> ' <rdf:Bag> ' <rdf:li>boy</rdf:li> ' <rdf:li>gender</rdf:li> ' <rdf:li>human beings</rdf:li> ' <rdf:li>humans</rdf:li> ' <rdf:li>lad</rdf:li> ' <rdf:li>male</rdf:li> ' <rdf:li>people</rdf:li> ' <rdf:li>3-12 years old</rdf:li> ' <rdf:li>age</rdf:li> ' <rdf:li>child</rdf:li> ' <rdf:li>youth</rdf:li> ' <rdf:li>african american</rdf:li> ' <rdf:li>african-american</rdf:li> ' <rdf:li>black</rdf:li> ' <rdf:li>ethnic</rdf:li> ' <rdf:li>ethnicity</rdf:li> ' <rdf:li>people of color</rdf:li> ' <rdf:li>race</rdf:li> ' <rdf:li>beach</rdf:li> ' <rdf:li>nature</rdf:li> ' <rdf:li>scenery</rdf:li> ' <rdf:li>emotion</rdf:li> ' <rdf:li>emotional</rdf:li> ' <rdf:li>emotions</rdf:li> ' <rdf:li>happiness</rdf:li> ' <rdf:li>happy</rdf:li> ' <rdf:li>joy</rdf:li> ' <rdf:li>joyful</rdf:li> ' <rdf:li>joyous</rdf:li> ' </rdf:Bag> ' </dc:subject> ' </rdf:Description> ' </rdf:RDF> ' </x:xmpmeta> ' You can generate parsing code using Chilkat's online tool : ' Generate Parsing Code from XML Dim rdf_Description_rdf_about As String Dim rdf_Description_xmlns_xmpPLUS As String Dim rdf_Description_xmlns_Iptc4xmpCore As String Dim rdf_Description_xmlns_exif As String Dim rdf_Description_xmlns_pdf As String Dim rdf_Description_xmlns_photoshop As String Dim rdf_Description_xmlns_tiff As String Dim rdf_Description_xmlns_xap As String Dim rdf_Description_xmlns_stRef As String Dim rdf_Description_xmlns_xapMM As String Dim rdf_Description_xmlns_xapRights As String Dim rdf_Description_xmlns_dc As String Dim xmpPLUS_CreditLineReq As String Dim xmpPLUS_ReuseAllowed As String Dim Iptc4xmpCore_IntellectualGenre As String Dim Iptc4xmpCore_Location As String Dim Iptc4xmpCore_CountryCode As String Dim Iptc4xmpCore_CreatorContactInfo_rdf_parseType As String Dim Iptc4xmpCore_CiAdrExtadr As String Dim Iptc4xmpCore_CiAdrCity As String Dim Iptc4xmpCore_CiAdrRegion As String Dim Iptc4xmpCore_CiAdrPcode As Integer Dim Iptc4xmpCore_CiAdrCtry As String Dim Iptc4xmpCore_CiTelWork As String Dim Iptc4xmpCore_CiEmailWork As String Dim Iptc4xmpCore_CiUrlWork As String Dim rdf_li As Integer Dim exif_ColorSpace As Integer Dim exif_PixelXDimension As Integer Dim exif_PixelYDimension As Integer Dim photoshop_AuthorsPosition As String Dim photoshop_Headline As String Dim photoshop_CaptionWriter As String Dim photoshop_DateCreated As String Dim photoshop_City As String Dim photoshop_State As String Dim photoshop_Country As String Dim photoshop_TransmissionReference As String Dim photoshop_Instructions As String Dim photoshop_Credit As String Dim photoshop_Source As String Dim tiff_XResolution As String Dim tiff_YResolution As String Dim tiff_ResolutionUnit As Integer Dim tiff_Orientation As Integer Dim xap_CreateDate As String Dim xap_ModifyDate As String Dim xap_MetadataDate As String Dim xap_CreatorTool As String Dim xapMM_DerivedFrom_rdf_parseType As String Dim stRef_instanceID As String Dim stRef_documentID As String Dim xapMM_DocumentID As String Dim xapRights_Marked As String Dim xapRights_WebStatement As String Dim rdf_li_xml_lang As String Dim strRdf_li As String Dim dc_format As String Dim j As Integer Dim count_j As Integer Dim x_xmpmeta_xmlns_x As String = xml.GetAttrValue("xmlns:x") Dim x_xmpmeta_x_xmptk As String = xml.GetAttrValue("x:xmptk") Dim rdf_RDF_xmlns_rdf As String = xml.ChilkatPath("rdf:RDF|(xmlns:rdf)") Dim rdf_RDF_xmlns_iX As String = xml.ChilkatPath("rdf:RDF|(xmlns:iX)") Dim i As Integer = 0 Dim count_i As Integer = xml.NumChildrenHavingTag("rdf:RDF|rdf:Description") While i < count_i xml.I = i rdf_Description_rdf_about = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|(rdf:about)") rdf_Description_xmlns_xmpPLUS = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|(xmlns:xmpPLUS)") rdf_Description_xmlns_Iptc4xmpCore = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|(xmlns:Iptc4xmpCore)") rdf_Description_xmlns_exif = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|(xmlns:exif)") rdf_Description_xmlns_pdf = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|(xmlns:pdf)") rdf_Description_xmlns_photoshop = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|(xmlns:photoshop)") rdf_Description_xmlns_tiff = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|(xmlns:tiff)") rdf_Description_xmlns_xap = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|(xmlns:xap)") rdf_Description_xmlns_stRef = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|(xmlns:stRef)") rdf_Description_xmlns_xapMM = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|(xmlns:xapMM)") rdf_Description_xmlns_xapRights = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|(xmlns:xapRights)") rdf_Description_xmlns_dc = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|(xmlns:dc)") xmpPLUS_CreditLineReq = xml.GetChildContent("rdf:RDF|rdf:Description[i]|xmpPLUS:CreditLineReq") xmpPLUS_ReuseAllowed = xml.GetChildContent("rdf:RDF|rdf:Description[i]|xmpPLUS:ReuseAllowed") Iptc4xmpCore_IntellectualGenre = xml.GetChildContent("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:IntellectualGenre") Iptc4xmpCore_Location = xml.GetChildContent("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:Location") Iptc4xmpCore_CountryCode = xml.GetChildContent("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CountryCode") Iptc4xmpCore_CreatorContactInfo_rdf_parseType = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|(rdf:parseType)") Iptc4xmpCore_CiAdrExtadr = xml.GetChildContent("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiAdrExtadr") Iptc4xmpCore_CiAdrCity = xml.GetChildContent("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiAdrCity") Iptc4xmpCore_CiAdrRegion = xml.GetChildContent("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiAdrRegion") Iptc4xmpCore_CiAdrPcode = xml.GetChildIntValue("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiAdrPcode") Iptc4xmpCore_CiAdrCtry = xml.GetChildContent("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiAdrCtry") Iptc4xmpCore_CiTelWork = xml.GetChildContent("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiTelWork") Iptc4xmpCore_CiEmailWork = xml.GetChildContent("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiEmailWork") Iptc4xmpCore_CiUrlWork = xml.GetChildContent("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiUrlWork") rdf_li = xml.GetChildIntValue("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:SubjectCode|rdf:Bag|rdf:li") rdf_li = xml.GetChildIntValue("rdf:RDF|rdf:Description[i]|Iptc4xmpCore:Scene|rdf:Bag|rdf:li") exif_ColorSpace = xml.GetChildIntValue("rdf:RDF|rdf:Description[i]|exif:ColorSpace") exif_PixelXDimension = xml.GetChildIntValue("rdf:RDF|rdf:Description[i]|exif:PixelXDimension") exif_PixelYDimension = xml.GetChildIntValue("rdf:RDF|rdf:Description[i]|exif:PixelYDimension") photoshop_AuthorsPosition = xml.GetChildContent("rdf:RDF|rdf:Description[i]|photoshop:AuthorsPosition") photoshop_Headline = xml.GetChildContent("rdf:RDF|rdf:Description[i]|photoshop:Headline") photoshop_CaptionWriter = xml.GetChildContent("rdf:RDF|rdf:Description[i]|photoshop:CaptionWriter") photoshop_DateCreated = xml.GetChildContent("rdf:RDF|rdf:Description[i]|photoshop:DateCreated") photoshop_City = xml.GetChildContent("rdf:RDF|rdf:Description[i]|photoshop:City") photoshop_State = xml.GetChildContent("rdf:RDF|rdf:Description[i]|photoshop:State") photoshop_Country = xml.GetChildContent("rdf:RDF|rdf:Description[i]|photoshop:Country") photoshop_TransmissionReference = xml.GetChildContent("rdf:RDF|rdf:Description[i]|photoshop:TransmissionReference") photoshop_Instructions = xml.GetChildContent("rdf:RDF|rdf:Description[i]|photoshop:Instructions") photoshop_Credit = xml.GetChildContent("rdf:RDF|rdf:Description[i]|photoshop:Credit") photoshop_Source = xml.GetChildContent("rdf:RDF|rdf:Description[i]|photoshop:Source") tiff_XResolution = xml.GetChildContent("rdf:RDF|rdf:Description[i]|tiff:XResolution") tiff_YResolution = xml.GetChildContent("rdf:RDF|rdf:Description[i]|tiff:YResolution") tiff_ResolutionUnit = xml.GetChildIntValue("rdf:RDF|rdf:Description[i]|tiff:ResolutionUnit") tiff_Orientation = xml.GetChildIntValue("rdf:RDF|rdf:Description[i]|tiff:Orientation") xap_CreateDate = xml.GetChildContent("rdf:RDF|rdf:Description[i]|xap:CreateDate") xap_ModifyDate = xml.GetChildContent("rdf:RDF|rdf:Description[i]|xap:ModifyDate") xap_MetadataDate = xml.GetChildContent("rdf:RDF|rdf:Description[i]|xap:MetadataDate") xap_CreatorTool = xml.GetChildContent("rdf:RDF|rdf:Description[i]|xap:CreatorTool") xapMM_DerivedFrom_rdf_parseType = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|xapMM:DerivedFrom|(rdf:parseType)") stRef_instanceID = xml.GetChildContent("rdf:RDF|rdf:Description[i]|xapMM:DerivedFrom|stRef:instanceID") stRef_documentID = xml.GetChildContent("rdf:RDF|rdf:Description[i]|xapMM:DerivedFrom|stRef:documentID") xapMM_DocumentID = xml.GetChildContent("rdf:RDF|rdf:Description[i]|xapMM:DocumentID") xapRights_Marked = xml.GetChildContent("rdf:RDF|rdf:Description[i]|xapRights:Marked") xapRights_WebStatement = xml.GetChildContent("rdf:RDF|rdf:Description[i]|xapRights:WebStatement") rdf_li_xml_lang = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|xapRights:RightsUsageTerms|rdf:Alt|rdf:li|(xml:lang)") strRdf_li = xml.GetChildContent("rdf:RDF|rdf:Description[i]|xapRights:RightsUsageTerms|rdf:Alt|rdf:li") rdf_li_xml_lang = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|xapRights:UsageTerms|rdf:Alt|rdf:li|(xml:lang)") strRdf_li = xml.GetChildContent("rdf:RDF|rdf:Description[i]|xapRights:UsageTerms|rdf:Alt|rdf:li") dc_format = xml.GetChildContent("rdf:RDF|rdf:Description[i]|dc:format") rdf_li_xml_lang = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|dc:description|rdf:Alt|rdf:li|(xml:lang)") strRdf_li = xml.GetChildContent("rdf:RDF|rdf:Description[i]|dc:description|rdf:Alt|rdf:li") rdf_li_xml_lang = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|dc:title|rdf:Alt|rdf:li|(xml:lang)") strRdf_li = xml.GetChildContent("rdf:RDF|rdf:Description[i]|dc:title|rdf:Alt|rdf:li") rdf_li_xml_lang = xml.ChilkatPath("rdf:RDF|rdf:Description[i]|dc:rights|rdf:Alt|rdf:li|(xml:lang)") strRdf_li = xml.GetChildContent("rdf:RDF|rdf:Description[i]|dc:rights|rdf:Alt|rdf:li") strRdf_li = xml.GetChildContent("rdf:RDF|rdf:Description[i]|dc:creator|rdf:Seq|rdf:li") j = 0 count_j = xml.NumChildrenHavingTag("rdf:RDF|rdf:Description[i]|dc:subject|rdf:Bag|rdf:li") While j < count_j xml.J = j strRdf_li = xml.GetChildContent("rdf:RDF|rdf:Description[i]|dc:subject|rdf:Bag|rdf:li[j]") j = j + 1 End While i = i + 1 End While |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.