使用自定义属性从PDF添加/删除/检索信息

对不起我昨天发布的问题不明确。 我想在自定义属性中存储2个字符串(string1和string2),以便字符串与pdf.I已经有字符串,但我不知道如何将它存储在自定义属性区域下。 自定义属性区域引用FILE —> Properties —-> Custom —-> Custom属性,它们成对获得“Name”和“Value”。 我希望“Value”中的string1存储和“Name”中的string2存储。

稍后,我想检索/删除自定义属性区域中的字符串。 请问如何用itext实现它?

感谢致敬,

布赖恩

谢谢你的澄清。 根据您对如何使用Acrobat添加所需数据的说明,我们现在知道您指的是元数据。

我已经使用Acrobat添加名为“Test”的自定义元数据条目,其值为“test”,当您查看该文件时,您可以看到此键/值对出现在两个位置(标有红点):

在此处输入图像描述

  1. 它存在于Info字典中,这是存储元数据的传统位置。
  2. 它作为名为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的自定义条目。