0

テキストの抽出など、PDFBoxでの作業を開始したばかりです。私が興味を持っていることの 1 つは、抽出しているテキスト自体の色です。ただし、その情報を取得する方法が見つからないようです。

PDFBox を使用してドキュメントの色情報を取得することはまったく可能ですか?

どうもありがとう。

4

1 に答える 1

4

すべての色情報はクラスに保存する必要がPDGraphicsStateあり、使用される色 (ストローク/非ストロークなど) は、使用されるテキスト レンダリング モード(pdfbox メーリング リスト経由) によって異なります。

ここに私が試した小さなサンプルがあります:

1行だけのpdfを作成した後(「Sample」と書かれてRGB=[146,208,80]います)、次のプログラムが出力されます。

デバイスRGB 146.115 208.08 80.07

コードは次のとおりです。

PDDocument doc = null;
try {
    doc = PDDocument.load("C:/Path/To/Pdf/Sample.pdf");
    PDFStreamEngine engine = new PDFStreamEngine(ResourceLoader.loadProperties("org/apache/pdfbox/resources/PageDrawer.properties"));
    PDPage page = (PDPage)doc.getDocumentCatalog().getAllPages().get(0);
    engine.processStream(page, page.findResources(), page.getContents().getStream());
    PDGraphicsState graphicState = engine.getGraphicsState();
    System.out.println(graphicState.getStrokingColor().getColorSpace().getName());
    float colorSpaceValues[] = graphicState.getStrokingColor().getColorSpaceValue();
    for (float c : colorSpaceValues) {
        System.out.println(c * 255);
    }
}
finally {
    if (doc != null) {
        doc.close();
    }

PageDrawer.propertiesPDF 演算子が Java クラスにどのようにマップされるかを確認するには、 を参照してください。

私が理解しているようにPDFStreamEngine、ページストリームを処理すると、現在処理している演算子に応じてさまざまな変数の状態が設定されます。そのため、緑色のテキストにヒットすると、適切な演算子に遭遇するため、PDGraphicsState が変更されます。そのため、ファイル内のマッピングで定義されCSているように呼び出します。などにマッピングされます。org.apache.pdfbox.util.operator.SetStrokingColorSpaceCS=org.apache.pdfbox.util.operator.SetStrokingColorSpace.propertiesRGorg.apache.pdfbox.util.operator.SetStrokingRGBColor

この場合、PDGraphicsStateドキュメントにはテキストのみがあり、テキストのスタイルは 1 つだけであるため、 は変更されていません。より高度なものについては、色が変化したときに何かを行うためにPDFStreamEngine( や他のクラスと同様PageDrawerに)拡張する必要があります。PDFTextStripper独自のマッピングを独自の.propertiesファイルに書き込むこともできます。

于 2012-02-06T09:03:23.057 に答える