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

时间:2014-11-04 01:53:03

标签: java pdf itext

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

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

谢谢和问候,

布赖恩

1 个答案:

答案 0 :(得分:2)

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

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

enter image description here

  1. 它出现在信息词典中,这是用于存储元数据的传统位置。
  2. 它作为名为Test的标记存在于XMP元数据流中,前缀为pdfx(用于自定义标记)。
  3. 使用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的自定义条目。