2014-11-04 36 views
1

对不起,我昨天发布的问题不清楚。我想在自定义属性中存储2个字符串(string1和string2),以便字符串与pdf.I已经有字符串,但我不知道如何将其存储在自定义属性区域下。自定义属性区是指文件--->属性---->自定义---->自定义属性,它们成对地取得了“名称”和“值”。我想要“价值”中的string1商店和“名称”中的字符串2商店。使用自定义属性从PDF添加/删除/检索信息

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

感谢和问候,

布赖恩

回答

2

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

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

enter image description here

  1. 它是存在于信息字典,它是用于存储元数据传统地方。
  2. 它以XMP元数据流形式出现,名为Test,前缀为pdfx(用于自定义标签)。

使用iText时,为Info字典添加额外值很容易。更新XMP元数据也是可能的,但您必须自己创建XMP流,这可能对您的情况有点过分。也许你的PDF只有一个Info字典而没有XMP。

此外:你说这个键的目的是检索它的值并在之后删除自定义条目。在这种情况下,在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()方法来添加标题,作者,...元数据。但是,如果要添加自定义条目,则需要使用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 s到这个Map现在添加额外的对。 在此示例中,我们添加了元数据的标准密钥,但您也可以使用自定义密钥。

删除现有PDF文件中的条目与添加条目的方式相同。这足以添加一个null值。例如:

info.put("Test", null); 

这将在情况下删除名为Test自定义条目,这个值是出现在你的信息的字典。

+0

我可以让代码检索字符串对吗?假设我在自定义属性中保存的是Name(Test)和Value(test),并且我知道Name是Test,如何取回值?谢谢 – brian 2014-11-06 05:46:22

+0

另一件事情是当我添加自定义属性(测试,测试)之前散列PDF,我得到字符串a。 – brian 2014-11-06 06:03:59

+0

但是,当我使用info.put(“Test”,null)方法删除Custom属性。删除自定义属性后,我再次散列pdf,得到另一个字符串b。这两个字符串是不一样的。我怎样才能让他们得到相同的哈希结果?我使用MD5 – brian 2014-11-06 06:06:05