使用自定义属性从PDF添加/删除/检索信息
对不起我昨天发布的问题不明确。 我想在自定义属性中存储2个字符串(string1和string2),以便字符串与pdf.I已经有字符串,但我不知道如何将它存储在自定义属性区域下。 自定义属性区域引用FILE —> Properties —-> Custom —-> Custom属性,它们成对获得“Name”和“Value”。 我希望“Value”中的string1存储和“Name”中的string2存储。
稍后,我想检索/删除自定义属性区域中的字符串。 请问如何用itext实现它?
感谢致敬,
布赖恩
谢谢你的澄清。 根据您对如何使用Acrobat添加所需数据的说明,我们现在知道您指的是元数据。
我已经使用Acrobat添加名为“Test”的自定义元数据条目,其值为“test”,当您查看该文件时,您可以看到此键/值对出现在两个位置(标有红点):
- 它存在于Info字典中,这是存储元数据的传统位置。
- 它作为名为Test的标记存在于XMP元数据流中,前缀为pdfx(用于自定义标记)。
使用iText时,可以轻松地向Info字典中添加额外的值。 也可以更新XMP元数据,但是您必须自己创建XMP流,并且可能在您的情况下过度。 也许您的PDF只有一个信息词典,没有XMP。
而且:你说拥有该密钥的目的是检索其值并在之后删除自定义条目。 在这种情况下,在Info字典中添加额外的条目就足够了。
根据您是要将Info字典中的自定义条目添加到从头创建的PDF还是现有PDF,您需要以下示例之一:
在CustomMetaEntry中 ,我们为标题和名为Test的自定义条目添加标准元数据条目:
public void createPdf(String dest) throws IOException, DocumentException { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(dest)); document.addTitle("Some example"); document.add(new Header("Test", "test")); document.open(); Paragraph p = new Paragraph("Hello World"); document.add(p); document.close(); }
如您所见,iText使用addX()
方法添加Title,Author,…元数据。 但是,如果要添加自定义条目,则需要使用add()
方法添加Header
实例。 您需要在打开文档之前添加元数据。
如果要将条目添加到现有PDF的信息词典中,可以从我的书中获取示例,例如MetadataPdf :
public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); Map info = reader.getInfo(); info.put("Title", "Hello World stamped"); info.put("Subject", "Hello World with changed metadata"); info.put("Keywords", "iText in Action, PdfStamper"); info.put("Creator", "Silly standalone example"); info.put("Author", "Also Bruno Lowagie"); stamper.setMoreInfo(info); stamper.close(); reader.close(); }
在此示例中,我们使用getInfo()
方法从PdfReader
实例获取信息字典。
这也解答了如何从PDF中检索自定义数据。 如果Map
包含带有键Test
的条目,则可以获得如下值:
String test = info.get("Test");
您现在可以向此Map
添加额外的String
对。 在示例中,我们添加了元数据的标准键,但您也可以使用自定义键。
从现有PDF文件中删除条目的方式与添加条目的方式相同。 添加null
值就足够了。 例如:
info.put("Test", null);
如果您的信息字典中存在此类值,则会删除名为Test
的自定义条目。