如何以只能由我的应用程序编辑的 pdf 格式存储元数据?
How do I store meta data in pdf which can only be edited by my application?
我在我的应用程序中实现了允许用户通过使用 pdfbox 库绘制各种相邻的半圆来绘制云的功能。我需要有关这些云的位置的信息,以检测用户的点击位置是否对应于 cloud.Since,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 存储在元数据 field.And 中,当要存储新的位置数据时,我提取以前的元数据并添加一个新的 xml 标签对应新的云location.And再次将xml存入pdf的元数据field.But,这种做法的问题是pdf的元数据字段会被覆盖,以防用户使用某些其他 pdf 编辑器,可能会在元数据字段中存储一些数据。
有没有办法将元数据存储在 pdf 中作为键值 pair.So,它只能由知道数据对应键的人编辑,就像网站存储 cookies 一样。
这是解决我问题的代码:
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);
我在我的应用程序中实现了允许用户通过使用 pdfbox 库绘制各种相邻的半圆来绘制云的功能。我需要有关这些云的位置的信息,以检测用户的点击位置是否对应于 cloud.Since,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 存储在元数据 field.And 中,当要存储新的位置数据时,我提取以前的元数据并添加一个新的 xml 标签对应新的云location.And再次将xml存入pdf的元数据field.But,这种做法的问题是pdf的元数据字段会被覆盖,以防用户使用某些其他 pdf 编辑器,可能会在元数据字段中存储一些数据。 有没有办法将元数据存储在 pdf 中作为键值 pair.So,它只能由知道数据对应键的人编辑,就像网站存储 cookies 一样。
这是解决我问题的代码:
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);