2014-11-04 102 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