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
(Tcl) 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.
load ./chilkat.dll # This requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. set pdf [new_CkPdf] # Load a PDF file. # If the PDF file already has metadata, we'll update it. # Otherwise this example adds the metadata. set success [CkPdf_LoadFile $pdf "qa_data/pdf/blank_with_metadata.pdf"] if {$success == 0} then { puts [CkPdf_lastErrorText $pdf] delete_CkPdf $pdf exit } set xml [new_CkXml] set sbExisting [new_CkStringBuilder] set hasMetadata [CkPdf_GetMetadata $pdf $sbExisting] if {$hasMetadata == 1} then { CkXml_LoadSb $xml $sbExisting 1 } else { # Otherwise create the bare minimum XMP metadata. CkXml_put_Tag $xml "x:xmpmeta" CkXml_AddAttribute $xml "xmlns:x" "adobe:ns:meta/" CkXml_AddAttribute $xml "x:xmptk" "Adobe XMP Core 9.1-c001 79.675d0f7, 2023/06/11-19:21:16 " CkXml_UpdateAttrAt $xml "rdf:RDF" 1 "xmlns:rdf" "http://www.w3.org/1999/02/22-rdf-syntax-ns#" CkXml_UpdateAttrAt $xml "rdf:RDF|rdf:Description" 1 "rdf:about" "" CkXml_UpdateAttrAt $xml "rdf:RDF|rdf:Description" 1 "xmlns:xmp" "http://ns.adobe.com/xap/1.0/" CkXml_UpdateAttrAt $xml "rdf:RDF|rdf:Description" 1 "xmlns:dc" "http://purl.org/dc/elements/1.1/" CkXml_UpdateAttrAt $xml "rdf:RDF|rdf:Description" 1 "xmlns:xmpMM" "http://ns.adobe.com/xap/1.0/mm/" CkXml_UpdateAttrAt $xml "rdf:RDF|rdf:Description" 1 "xmlns:pdf" "http://ns.adobe.com/pdf/1.3/" CkXml_UpdateAttrAt $xml "rdf:RDF|rdf:Description" 1 "xmlns:xmpRights" "http://ns.adobe.com/xap/1.0/rights/" set dt [new_CkDateTime] CkDateTime_SetFromCurrentSystemTime $dt set ts [CkDateTime_getAsTimestamp $dt 1] CkXml_UpdateChildContent $xml "rdf:RDF|rdf:Description|xmp:ModifyDate" $ts CkXml_UpdateChildContent $xml "rdf:RDF|rdf:Description|xmp:CreateDate" $ts CkXml_UpdateChildContent $xml "rdf:RDF|rdf:Description|xmp:MetadataDate" $ts CkXml_UpdateChildContent $xml "rdf:RDF|rdf:Description|xmp:CreatorTool" "My Custom Application" CkXml_UpdateChildContent $xml "rdf:RDF|rdf:Description|dc:format" "application/pdf" set sbDocId [new_CkStringBuilder] CkStringBuilder_Append $sbDocId "uuid:" CkStringBuilder_AppendUuid $sbDocId 1 CkXml_UpdateChildContent $xml "rdf:RDF|rdf:Description|xmpMM:DocumentID" [CkStringBuilder_getAsString $sbDocId] set sbInstanceId [new_CkStringBuilder] CkStringBuilder_Append $sbInstanceId "uuid:" CkStringBuilder_AppendUuid $sbInstanceId 1 CkXml_UpdateChildContent $xml "rdf:RDF|rdf:Description|xmpMM:InstanceID" [CkStringBuilder_getAsString $sbInstanceId] } # Add our custom metadata tags to either the existing XML metdata, or the newly created metadata. CkXml_UpdateAttrAt $xml "rdf:RDF|rdf:Description" 1 "xmlns:zf" "urn:ferd:pdfa:CrossIndustryDocument:invoice:1p0#" CkXml_UpdateAttrAt $xml "rdf:RDF|rdf:Description" 1 "rdf:about" " " CkXml_UpdateChildContent $xml "rdf:RDF|rdf:Description|zf:ConformanceLevel" "BASIC" CkXml_UpdateChildContent $xml "rdf:RDF|rdf:Description|zf:DocumentFileName" "ZZZZZZ-invoice.xml" CkXml_UpdateChildContent $xml "rdf:RDF|rdf:Description|zf:DocumentType" "INVOICE" CkXml_UpdateChildContent $xml "rdf:RDF|rdf:Description|zf:Version" "1.0" # Create a new PDF with the updated metadata. set sb [new_CkStringBuilder] CkXml_GetXmlSb $xml $sb set success [CkPdf_UpdateMetadata $pdf $sb "c:/temp/qa_output/out.pdf"] if {$success == 1} then { puts "Success" } else { puts [CkPdf_lastErrorText $pdf] } # 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. puts "OK" delete_CkPdf $pdf delete_CkXml $xml delete_CkStringBuilder $sbExisting delete_CkDateTime $dt delete_CkStringBuilder $sbDocId delete_CkStringBuilder $sbInstanceId delete_CkStringBuilder $sb |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.