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
(Objective-C) PDF Update or Add XML MetadataDemonstrates how to add or update the XML metadata stored in a PDF. Note: This example requires Chilkat v10.1.0 or later.
#import <CkoPdf.h> #import <CkoXml.h> #import <CkoStringBuilder.h> #import <CkoDateTime.h> #import <NSString.h> // This requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. CkoPdf *pdf = [[CkoPdf alloc] init]; // Load a PDF file. // If the PDF file already has metadata, we'll update it. // Otherwise this example adds the metadata. BOOL success = [pdf LoadFile: @"qa_data/pdf/blank_with_metadata.pdf"]; if (success == NO) { NSLog(@"%@",pdf.LastErrorText); return; } CkoXml *xml = [[CkoXml alloc] init]; CkoStringBuilder *sbExisting = [[CkoStringBuilder alloc] init]; BOOL hasMetadata = [pdf GetMetadata: sbExisting]; if (hasMetadata == YES) { [xml LoadSb: sbExisting autoTrim: YES]; } else { // Otherwise create the bare minimum XMP metadata. xml.Tag = @"x:xmpmeta"; [xml AddAttribute: @"xmlns:x" value: @"adobe:ns:meta/"]; [xml AddAttribute: @"x:xmptk" value: @"Adobe XMP Core 9.1-c001 79.675d0f7, 2023/06/11-19:21:16 "]; [xml UpdateAttrAt: @"rdf:RDF" autoCreate: YES attrName: @"xmlns:rdf" attrValue: @"http://www.w3.org/1999/02/22-rdf-syntax-ns#"]; [xml UpdateAttrAt: @"rdf:RDF|rdf:Description" autoCreate: YES attrName: @"rdf:about" attrValue: @""]; [xml UpdateAttrAt: @"rdf:RDF|rdf:Description" autoCreate: YES attrName: @"xmlns:xmp" attrValue: @"http://ns.adobe.com/xap/1.0/"]; [xml UpdateAttrAt: @"rdf:RDF|rdf:Description" autoCreate: YES attrName: @"xmlns:dc" attrValue: @"http://purl.org/dc/elements/1.1/"]; [xml UpdateAttrAt: @"rdf:RDF|rdf:Description" autoCreate: YES attrName: @"xmlns:xmpMM" attrValue: @"http://ns.adobe.com/xap/1.0/mm/"]; [xml UpdateAttrAt: @"rdf:RDF|rdf:Description" autoCreate: YES attrName: @"xmlns:pdf" attrValue: @"http://ns.adobe.com/pdf/1.3/"]; [xml UpdateAttrAt: @"rdf:RDF|rdf:Description" autoCreate: YES attrName: @"xmlns:xmpRights" attrValue: @"http://ns.adobe.com/xap/1.0/rights/"]; CkoDateTime *dt = [[CkoDateTime alloc] init]; [dt SetFromCurrentSystemTime]; NSString *ts = [dt GetAsTimestamp: YES]; [xml UpdateChildContent: @"rdf:RDF|rdf:Description|xmp:ModifyDate" value: ts]; [xml UpdateChildContent: @"rdf:RDF|rdf:Description|xmp:CreateDate" value: ts]; [xml UpdateChildContent: @"rdf:RDF|rdf:Description|xmp:MetadataDate" value: ts]; [xml UpdateChildContent: @"rdf:RDF|rdf:Description|xmp:CreatorTool" value: @"My Custom Application"]; [xml UpdateChildContent: @"rdf:RDF|rdf:Description|dc:format" value: @"application/pdf"]; CkoStringBuilder *sbDocId = [[CkoStringBuilder alloc] init]; [sbDocId Append: @"uuid:"]; [sbDocId AppendUuid: YES]; [xml UpdateChildContent: @"rdf:RDF|rdf:Description|xmpMM:DocumentID" value: [sbDocId GetAsString]]; CkoStringBuilder *sbInstanceId = [[CkoStringBuilder alloc] init]; [sbInstanceId Append: @"uuid:"]; [sbInstanceId AppendUuid: YES]; [xml UpdateChildContent: @"rdf:RDF|rdf:Description|xmpMM:InstanceID" value: [sbInstanceId GetAsString]]; } // Add our custom metadata tags to either the existing XML metdata, or the newly created metadata. [xml UpdateAttrAt: @"rdf:RDF|rdf:Description" autoCreate: YES attrName: @"xmlns:zf" attrValue: @"urn:ferd:pdfa:CrossIndustryDocument:invoice:1p0#"]; [xml UpdateAttrAt: @"rdf:RDF|rdf:Description" autoCreate: YES attrName: @"rdf:about" attrValue: @" "]; [xml UpdateChildContent: @"rdf:RDF|rdf:Description|zf:ConformanceLevel" value: @"BASIC"]; [xml UpdateChildContent: @"rdf:RDF|rdf:Description|zf:DocumentFileName" value: @"ZZZZZZ-invoice.xml"]; [xml UpdateChildContent: @"rdf:RDF|rdf:Description|zf:DocumentType" value: @"INVOICE"]; [xml UpdateChildContent: @"rdf:RDF|rdf:Description|zf:Version" value: @"1.0"]; // Create a new PDF with the updated metadata. CkoStringBuilder *sb = [[CkoStringBuilder alloc] init]; [xml GetXmlSb: sb]; success = [pdf UpdateMetadata: sb outFilePath: @"c:/temp/qa_output/out.pdf"]; if (success == YES) { NSLog(@"%@",@"Success"); } else { NSLog(@"%@",pdf.LastErrorText); } // To see the metadata in Adobe Acrobat DC, // 1) Open the PDF. // 2) CTRL-D to show the Document Properties dialog. // 3) In the dialog, click on the "Additional Metadata" button. // 4) In the Additional Data dialog, click on "Advanced" // 5) Expand the namespace tree for the metadata you added. NSLog(@"%@",@"OK"); |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.