Je dois lire et écrire dans les métadonnées XMP d'un fichier PDF/A. J'utilise itextsharp 7 et j'ai essayé plusieurs façons d'atteindre mon objectif, sans beaucoup de succès. Les domaines comme control:Anzahl_Zeichen_Titel
sont ma cible. Le code suivant devrait faire le travail, mais je ne peux pas comprendre exactement comment.Lecture et écriture de métadonnées XML dans un document PDF/A
PdfADocument pdfADocument = new PdfADocument(new PdfReader(Vorlage), new PdfWriter(Ausgabe), new StampingProperties());
XMPMeta xmpMeta = XMPMetaFactory.ParseFromBuffer(pdfADocument.GetXmpMetadata());
XMPProperty test1 = xmpMeta.GetProperty("ftx:ControlData", "control:Anzahl_Zeichen_Vorname");
XMPProperty test2 = xmpMeta.GetProperty("http://www.aiim.org/pdfa/ns/schema#", "ControlData");
Lorsque j'utilise la version test1 il me montre un XMPException "espace de noms de schéma URI non enregistré". La seconde semble fonctionner mais la variable test2 est nulle.
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c015 84.159810, 2016/09/10-02:41:30 ">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/"
xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#"
xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#"
xmlns:pdfaType="http://www.aiim.org/pdfa/ns/type#"
xmlns:pdfaField="http://www.aiim.org/pdfa/ns/field#"
xmlns:ftx="http://ns.ftx.com/forms/1.0/"
xmlns:control="http://ns.ftx.com/forms/1.0/controldata/">
<xmp:CreatorTool>QuarkXPress(R) 8.12</xmp:CreatorTool>
<xmp:CreateDate>2017-03-14T08:56:49+01:00</xmp:CreateDate>
<xmp:ModifyDate>2017-04-11T14:35:21+02:00</xmp:ModifyDate>
<xmp:MetadataDate>2017-04-11T14:35:21+02:00</xmp:MetadataDate>
<dc:format>application/pdf</dc:format>
<!-- snip -->
<ftx:ControlData rdf:parseType="Resource">
<control:Anzahl_Zeichen_Titel>0</control:Anzahl_Zeichen_Titel>
<control:Anzahl_Zeichen_Vorname>0</control:Anzahl_Zeichen_Vorname>
<control:Anzahl_Zeichen_Namenszusatz>0</control:Anzahl_Zeichen_Namenszusatz>
<control:Anzahl_Zeichen_Hausnummer>0</control:Anzahl_Zeichen_Hausnummer>
<control:Anzahl_Zeichen_Postleitzahl>0</control:Anzahl_Zeichen_Postleitzahl>
<control:Anzahl_Zeichen_Wohnsitzlaendercode>0</control:Anzahl_Zeichen_Wohnsitzlaendercode>
<control:Auftragsnummer_Einsender>0</control:Auftragsnummer_Einsender>
<control:Formularnummer>10</control:Formularnummer>
<control:Formularversion>07.2017</control:Formularversion>
</ftx:ControlData>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>
Comment dois-je utiliser les méthodes pour créer et lire des données valides?
Ceci n'est que partiellement utilisable. Il existe des différences entre itext et itextsharp. GetProperty ne fonctionne pas sans un espace de noms propre. Il ne peut pas être nul ou une chaîne vide. Mais la première version aide à aller plus loin. Quand je regarde dans la structure de données, il retourne mes valeurs nécessaires. – Booser
Mais il n'a aucune méthode pour y accéder. Je suis en train de jouer avec les différentes méthodes pour obtenir les valeurs finales. 'contrôle: Formularnummer' et ainsi de suite. Ils ne peuvent pas être lus comme montré. 'xmpMeta.DoesPropertyExist (" http://ns.ftx.com/forms/1.0/controldata/ "," control: Formularnummer ");' dit NON. – Booser