对不起我昨天发布的问题不明确。我想在自定义属性中存储2个字符串(string1和string2),以便字符串与pdf.I已经有字符串,但我不知道如何将它存储在自定义属性区域下。自定义属性区域是指FILE --->属性---->自定义---->自定义属性,它们成对获得“名称”和“值”。我希望“Value”中的string1存储和“Name”中的string2存储。
稍后,我想检索/删除自定义属性区域中的字符串。 请问如何使用itext实现它?
谢谢和问候,
布赖恩
答案 0 :(得分:2)
谢谢你的澄清。根据您对如何使用Acrobat添加所需数据的说明,我们现在知道您指的是元数据。
我已经使用Acrobat添加名为“Test”的自定义元数据条目,其值为“test”,当您查看该文件时,您可以看到此键/值对出现在两个位置(标有红色)点):
使用iText时,可以轻松地向Info字典中添加额外的值。也可以更新XMP元数据,但是您必须自己创建XMP流,并且可能在您的情况下有点过分。也许您的PDF只有一个信息词典,没有XMP。
此外:您说拥有该密钥的目的是检索其值并在之后删除自定义条目。在这种情况下,在信息词典中添加额外条目就足够了。
根据您是要将自定义条目添加到从头创建的PDF或现有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()
方法添加标题,作者,...元数据。但是,如果要添加自定义条目,则需要使用add()
方法添加Header
实例。您需要在打开文档之前添加元数据。
如果要将条目添加到现有PDF的信息词典中,可以从我的book中获取示例,例如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<String, String> 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();
}
在此示例中,我们使用PdfReader
方法从getInfo()
实例获取信息字典。
这也解释了如何从PDF中检索自定义数据。如果Map
包含带有键Test
的条目,您可以获得如下值:
String test = info.get("Test");
您现在可以向此String
添加额外的Map
对。
在示例中,我们添加了元数据的标准键,但您也可以使用自定义键。
从现有PDF文件中删除条目的方式与添加条目的方式相同。添加null
值就足够了。例如:
info.put("Test", null);
如果您的信息词典中存在此类值,则会删除名为Test
的自定义条目。