3

PDFBoxを使用して特定の画像の「代替テキスト」を抽出する方法はありますか?

http://www.w3.org/WAI/GL/2011/WD-WCAG20-TECHS-20110621/pdf.html#PDF1で説明されているように、画像に代替テキストが追加されたPDFファイルがあります。PDFBoxを使用すると、PDFDocument.getDocumentCatalog()。getAllPages()[iterator] .getResources.getImages()を介して、オブジェクトモデルから画像自体(PDXObjectImage)に到達する方法を見つけることができますが、画像から取得する方法がわかりません。それ自体を代替テキストに変換します。

小さなサンプルPDF(代替テキストが指定された単一の画像を含む)はhttp://dl.dropbox.com/u/12253279/image_test_pass.pdfにあります(「これは画像の代替テキストです。 。")。

4

2 に答える 2

2

これが PDFBox でどのように/できるかはわかりませんが、この機能は Logical Structutre/Tagged PDF と呼ばれる PDF 仕様のセクションに関連していると言えます。 .

使用しているツールでサポートされていると仮定すると、この情報を取得するには 4 つの主な手順に従う必要があります (次の説明のために投稿したサンプル PDF ファイルを使用します)。

PDF ファイルの内部構造にアクセスできると仮定すると、次のことを行う必要があります。

1- ページ コンテンツを解析し、関心のある画像をラップする Tag 要素の 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 

あなたのイメージ: ここに画像の説明を入力

2- ページ オブジェクトで、キー StructParents を取得します。 ここに画像の説明を入力

3- ここで、構造ツリー (すべての PDF ファイルのルート オブジェクトであるカタログ オブジェクトのキー StructTreeRoot) を取得し、その中にある ParentTree を取得します。

4- ParentTree は、要素のペアを見つけることができる配列で始まります (詳細については、PDF 仕様の Number Trees を参照してください)。この特定のツリーでは、各ペアの最初の要素は手順 2 で取得した StructParents キーに対応する数値であり、2 番目の要素はオブジェクトの配列であり、インデックスは手順 1 で取得した MCID 値に対応しています。 、ここで画像の MCID 値に対応する要素を検索すると、PDF オブジェクトが見つかります。このオブジェクト内に、代替テキストがあります。

ここに画像の説明を入力

簡単ですね。

この回答で使用したツール:
PDF Vole (iText に基づく)
Amyuni PDF Analyzer

于 2012-09-21T14:50:01.593 に答える
0

PDFBox メーリング リストの Eric から次のメッセージが届きましたが、まだテストしていません...


やあ、

テスト ファイルの場合、"/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、エリック

于 2012-09-23T23:54:14.637 に答える