2017-04-05 2 views
0

J'ai implémenté des fonctionnalités dans mon application pour permettre à l'utilisateur de dessiner des nuages ​​en dessinant divers demi-cercles adjacents en utilisant la bibliothèque pdfbox. J'ai besoin d'informations sur les emplacements de ces nuages, pour détecter si l'emplacement du clic de l'utilisateur correspond à un nuage. Puisque la bibliothèque pdfbox ne me donne aucune information concernant l'emplacement de ces nuages, je stocke leur emplacement dans le champ de méta données de pdf le code suivant (pendant que le nuage est dessiné).Comment stocker des métadonnées en pdf qui ne peuvent être éditées que par mon application?

PDDocumentCatalog catalog = doc.getDocumentCatalog(); 
PDMetadata pdMetaData = catalog.getMetadata(); 
// Code to append new metadata to previous stored meta data. 
java.io.InputStream newData = new java.io.ByteArrayInputStream(Encoding.UTF8.GetBytes(newMetaData)); 
PDMetadata newPDMetadata = new PDMetadata(doc, newData, false); 
catalog.setMetadata(newPDMetadata); 

je stocke les données de localisation xml dans le field.And de métadonnées, lorsque de nouvelles données de localisation doit être stocké, j'extraire les méta-données précédentes et ajouter une nouvelle balise XML correspondant à la nouvelle location.And nuage stocker le xml dans le champ de métadonnées du pdf. Mais le problème avec cette approche est que le champ de métadonnées de pdf sera écrasé, dans le cas où l'utilisateur utilise un autre éditeur de pdf, qui pourrait stocker des données dans le champ de métadonnées. Existe-t-il un moyen de stocker des métadonnées en pdf en tant que paire de valeurs clés? Ainsi, il ne peut être édité que par une personne connaissant la clé correspondant aux données, tout comme les sites Web stockent les cookies.

+0

Selon la spécification PDF * le format du XML représentant les métadonnées est défini dans le cadre d'un cadre appelé Extensible Metadata Platform (XMP) et décrit dans le document Adobe XMP: Extensible Metadata Platform. * Respectez-vous cette spécification lorsque vous créez et ajoutez vos métadonnées? – mkl

+0

Cela étant dit, vous pouvez ajouter de nouvelles entrées presque partout, et si vous utilisez une clé avec un préfixe que vous avez enregistré conformément à l'Annexe E de la spécification PDF, cette entrée ne doit pas entrer en conflit avec l'utilisation PDF de quelqu'un d'autre. – mkl

+0

Ma pensée est similaire au 2ème commentaire de mkl. Par exemple, faites ceci: 'page.getCOSObject(). SetItem (COSName.get (" yourname "), yourstuff);' –

Répondre

0

Voici le code qui a résolu mon problème:

int pageNum = 0; 
PDPage page = (PDPage)doc.getDocumentCatalog().getAllPages().get(pageNum); 
COSName markupMetadataElement = COSName.getPDFName(Key); 
COSDictionary dictionary = page.getCOSDictionary(); 
COSString newCosString = new COSString(newMetaData); 
dictionary.setItem(markupMetadataElement, newCosString);