2012-09-21 28 views
3

是否有某種方法可以使用PDFBox爲特定圖像提取「替代文本」?通過PDFBox訪問圖像的「替代文本」

我有一個PDF文件,如http://www.w3.org/WAI/GL/2011/WD-WCAG20-TECHS-20110621/pdf.html#PDF1所述,已將替代文本添加到圖像中。使用PDFBox我可以通過PDFDocument.getDocumentCatalog()。getAllPages()[iterator] .getResources.getImages()找到我通過對象模型到圖像本身(PDXObjectImage)的方式,但是我看不到任何方法從圖像中獲取本身到它的替代文本。

可以在http://dl.dropbox.com/u/12253279/image_test_pass.pdf(它應該說「這是圖像的替代文本」)找到一個小樣本PDF(帶有指定了一些替代文本的單個圖像)。

+0

Matt,你想要做什麼?將PDF轉換爲另一種格式? * PDFBox鏈接不適用於我* –

+0

我的目標是自動檢查每個圖像是否具有與其關聯的一些「替代文本」,作爲輔助功能檢查工具的一部分。 –

回答

2

我不知道如果PDFBox可以做到這一點,但我可以告訴你這個功能與PDF規範中稱爲邏輯結構/標記PDF的部分有關,這在每個PDF中都不完全支持工具在那裏。

假設您使用的工具支持它,您將不得不按照4個主要步驟來檢索此信息(我將使用您發佈的樣本PDF文件作爲以下說明)。

假設你有機會獲得PDF文件的內部結構,你將需要:

1-解析頁面內容,發現包你感興趣的圖像標籤元素的MCID數。

網頁內容:

BT 
/P <</MCID 0 >>BDC 
/GS0 gs 
/TT0 1 Tf 
0.0004 Tc -0.0028 Tw 10.02 0 0 10.02 90 711 Tm 
(This is an image test)Tj 
EMC 
ET 
/Figure <</MCID 1 >>BDC 
q 
106.5 0 0 106.5 90 591.0599976 cm 
/Im0 Do 
Q 
EMC 

你的圖像: enter image description here

2-在第e頁面對象,檢索關鍵StructParents。 enter image description here

3-現在檢索結構樹(Catalog對象的關鍵StructTreeRoot,它是每個PDF文件中的根對象),並在其內部檢索ParentTree。

4- ParentTree以數組開頭,您可以在其中找到元素對(有關更多詳細信息,請參閱PDF Spec中的Number Trees)。在這個特定的樹中,每一對中的第一個元素是一個數字值,對應於步驟2中檢索到的StructParents鍵,第二個元素是一個對象數組,其中索引對應於步驟1中獲取的MCID值。 ,您將在這裏搜索與圖像的MCID值相對應的元素,並且您將找到一個PDF對象。在這個對象內部,你會找到替代文字。

enter image description here

看起來很容易,不是嗎?在這個答案中使用

工具:
PDF田鼠(基於iText的)
Amyuni PDF分析

0

從PDFBox的郵件列表埃裏克發出以下,雖然我沒有測試出來呢...


嗨,

爲了您的測試文件,這裏是訪問 「/ Alt」 鍵進入的方式:

PDDocument document = PDDocument.load("image_test_pass.pdf"); 
    PDStructureTreeRoot treeRoot = 
     document.getDocumentCatalog().getStructureTreeRoot(); 

    // get page for each StructElement 
    for (Object o : treeRoot.getKids()) { 
     if (o instanceof PDStructureElement) { 
      PDStructureElement structElement = (PDStructureElement)o; 
      System.out.println(structElement.getAlternateDescription()); 
      PDPage page = structElement.getPage(); 
      if (page != null) { 
       page.getResources().getImages(); 
      } 
     } 
    } 

請參考PDF規範http://www.adobe.com/devnet/acrobat/pdfs/PDF32000_2008.pdf,特別§14.6, §14.7, §14.9.3和§14.9.4瞭解所有規則,以便查找「/ Alt」 條目。似乎有幾種方法來定義這些信息。

BR, Eric

+0

此代碼可能適用於您發送的特定文件,但不適用於所有可能的pdf – yms

+0

此代碼有許多問題:1-它僅顯示樹的第一級元素,而且我們都知道樹不是一個列表。 2-通過這種方法,圖像的替代文本與其相應的圖像沒有直接關聯。 3- StructElement對象中的頁面屬性是可選的,所以你甚至可能沒有頁面關聯。 – yms