Deux modules Diva sont à utiliser pour lire ou écrire des informations Factur-X
yMetaDataOpen.dhop
Fonctions du module
function int MetaDataOpen
chargement de la dll "DhDivaltoRTFtoHTMLConnector.dll",
contient le code pour extraire le fichier xml factur-x d'un fichier pdf
renvoi 0 si ok , sinon renvoi la valeur 1 si le chargement n'a pas aboutit
function int MetaDataClose
ferme la dll "DhDivaltoRTFtoHTMLConnector.dll", elle renvoi toujours 0
function int MetaDataExtractFacturxToFile(fichier,fichierxml,&txterr,options)
1 fichier A ;fichier pdf a lire avec un chemin windows
1 fichierxml A ;fichier dans lequel la dll va écrire le fichier xmnp qui contient les metadatas au format xml du fichier pdf
1 txterr A ;texte d'erreur si la fonction renvoi <> 0
1 options A ;options pour le futur, pour l'instant mettre un chaine à espace
extraction du fichier xml facturx d'un fichier pdf
fichierxml : ! doit déjà exister, et à supprimer ensuite
Le fichierxml doit déjà exister. On peut le créer avec la séquence suivante
record * htdf tdfficeml 1 fichierxml 256 = " " Tmpfcreate (tdfficeml, 2, 0) fclose(tdfficeml) fichierxml = tdfficeml.Name
puis le supprimer
;et a la fin du traitement du fichier il faut le supprimer avec le code windeletefile(left(fichierxml))
function int MetaDataExtractMetadataToFile(fichier,fichierxml,&txterr,options)
1 fichier A
1 fichierxml A
1 txterr A
1 options A
extraction du fichier metadata xmp (xmnp) d'un fichier pdf
fonctionne exactement comme MetaDataExtractFacturxToFile mais au lieu de renvoyer le fichier factur-x, elle renvoi le fichier metadata xmp (ou xmnp)
Fichier xmp ou xmnp
C'est un fichier xml qui decrit le type de fichier pdf , il contient le titre du fichier, la date de création et certaine informations comme le mode pdf a 3, la liste des mot clés, c'est dans ce fichier que divalto écrit les informations provenant de
err = MetaDataModele("BASIC") ;par défaut BASIC
err = MetaDataTitle("facture_Nebout_125e_du_12/08/2021") ;titre
err = MetaDataSubject("facture client Nebout de 125 euro pour livres du 12/08/2021") ;le sujet
err = MetaDataKeywords("facture Nebout livres") ;mot cles pour la recherche dans les metadatas
et les caractéristiques du fichier pdf
Vous pouvez trouver la définition d'un fichier "xmp metadata pdf" sur internet
Voici un exemple :
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta x:xmptk="Adobe XMP Core 4.2.1-c041 52.342996, 2008/05/07-20:48:00" xmlns:x="adobe:ns:meta/"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description xmlns:fx="urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#" rdf:about=""> <fx:DocumentType>INVOICE</fx:DocumentType> <fx:DocumentFileName>factur-x.xml</fx:DocumentFileName> <fx:Version>1.0</fx:Version> <fx:ConformanceLevel>BASIC</fx:ConformanceLevel> </rdf:Description> <rdf:Description xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/" rdf:about=""> <pdfaid:part>3</pdfaid:part> <pdfaid:conformance>B</pdfaid:conformance> </rdf:Description> <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about=""> <dc:title> <rdf:Alt> <rdf:li xml:lang="x-default">facture_Nebout_125e_du_12/08/2021</rdf:li> </rdf:Alt> </dc:title> <dc:creator> <rdf:Seq> <rdf:li>Divalto</rdf:li> </rdf:Seq> </dc:creator> <dc:description> <rdf:Alt> <rdf:li xml:lang="x-default">facture client Nebout de 125 euro pour livres du 12/08/2021</rdf:li> </rdf:Alt> </dc:description> </rdf:Description> <rdf:Description xmlns:pdf="http://ns.adobe.com/pdf/1.3/" rdf:about=""> <pdf:Producer>Generateur PDF de DivaltoViewer v1.92</pdf:Producer> <pdf:Keywords>facture Nebout livres</pdf:Keywords> </rdf:Description> <rdf:Description xmlns:xmp="http://ns.adobe.com/xap/1.0/" rdf:about=""> <xmp:MetadataDate>2022-11-26T12:44:17+01:00</xmp:MetadataDate> <xmp:CreatorTool>Divalto</xmp:CreatorTool> <xmp:CreateDate>2022-11-26T12:44:17+01:00</xmp:CreateDate> <xmp:ModifyDate>2022-11-26T12:44:17+01:00</xmp:ModifyDate> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"> <xmpMM:InstanceID>uuid: 07e60b0c-2c11-31ab-07e6-0b0c2c1131ab</xmpMM:InstanceID> <xmpMM:DocumentID>uuid: 07e60b0c-2c11-31ab-07e6-0b0c2c1131ab</xmpMM:DocumentID> </rdf:Description> <rdf:Description xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/" xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#" xmlns:pdfaType="http://www.aiim.org/pdfa/ns/type#" xmlns:pdfaField="http://www.aiim.org/pdfa/ns/field#" xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#" rdf:about=""> <pdfaExtension:schemas> <rdf:Bag> <rdf:li rdf:parseType="Resource"> <pdfaSchema:schema>Factur-X PDFA Extension Schema</pdfaSchema:schema> <pdfaSchema:namespaceURI>urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#</pdfaSchema:namespaceURI> <pdfaSchema:prefix>fx</pdfaSchema:prefix> <pdfaSchema:property> <rdf:Seq> <rdf:li rdf:parseType="Resource"> <pdfaProperty:name>DocumentFileName</pdfaProperty:name> <pdfaProperty:valueType>Text</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>name of the embedded XML invoice file</pdfaProperty:description> </rdf:li> <rdf:li rdf:parseType="Resource"> <pdfaProperty:name>DocumentType</pdfaProperty:name> <pdfaProperty:valueType>Text</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>INVOICE</pdfaProperty:description> </rdf:li> <rdf:li rdf:parseType="Resource"> <pdfaProperty:name>Version</pdfaProperty:name> <pdfaProperty:valueType>Text</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>The actual version of the Factur-X XML schema</pdfaProperty:description> </rdf:li> <rdf:li rdf:parseType="Resource"> <pdfaProperty:name>ConformanceLevel</pdfaProperty:name> <pdfaProperty:valueType>Text</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>The conformance level of the embedded Factur-X data</pdfaProperty:description> </rdf:li> </rdf:Seq> </pdfaSchema:property> </rdf:li> </rdf:Bag> </pdfaExtension:schemas> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>