如何以pdf格式存储只能由我的应用程序编辑的元数据?

时间:2017-04-05 12:52:09

标签: metadata pdfbox

我已经在我的应用程序中实现了功能,允许用户通过使用pdfbox库绘制各个相邻的半圆来绘制云。我需要有关这些云的位置的信息,以检测用户的点击位置是否对应于云。因为,pdfbox库没有给我任何关于这些云的位置的信息,我存储它们的位置在pdf的元数据字段中使用以下代码(在绘制云时)。

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);

我将位置数据存储为元数据字段中的xml。并且,当要存储新位置数据时,我提取先前的元数据并添加与新云位置对应的新xml标记。并再次存储xml在pdf的元数据领域。但是,这种方法的问题是pdf的元数据字段将被覆盖,以防用户使用其他一些pdf编辑器,这可能会在元数据中存储一些数据数据字段。 有没有办法将pdf中的元数据存储为键值对。因此,它只能由知道对应数据的密钥的人编辑,就像网站存储cookie一样。

1 个答案:

答案 0 :(得分:0)

以下是解决我问题的代码:

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);