2017-04-17 61 views
1

こんにちは私はこのコードを使用してPDF内のコンポーネントの位置を取得しています。フィールドが、その後fieldAreaArray = nullをPDFboxを使用してラジオボタンの位置を取得する方法

COSDictionary fieldDict = field.getCOSObject(); 
COSArray fieldAreaArray = (COSArray) fieldDict.getDictionaryObject(COSName.RECT); 

      float left = (float) ((COSFloat) fieldAreaArray.get(0)).doubleValue();    
      float bottom = (float) ((COSFloat) fieldAreaArray.get(1)).doubleValue(); 
      float right = (float) ((COSFloat) fieldAreaArray.get(2)).doubleValue(); 
      float top = (float) ((COSFloat) fieldAreaArray.get(3)).doubleValue(); 
+1

フォームフィールドとその視覚化(ウィジェット)の間にpdfsに違いがあることに注意する必要があります。フォームフィールドに単一のビジュアライゼーションのみがある場合、フォームフィールドをモデリングするpdfオブジェクトとビジュアライゼーションをモデリングするpdfオブジェクトを1つのオブジェクトにマージすることができます。このような統合された状況でのみ、コードが機能します。一方、ラジオボタンフォームフィールドは、フォームフィールドがラジオボタンの接続されたグループ全体の状態を表すため、ウィジェットは1つしかありません。 – mkl

+0

@ Tomm23 PDFDebuggerでファイルを見るのが一番です。 「内部構造の表示」に変更し、ルート/アクロフォーム/フィールドを確認します。ウィジェットを再作成し、フィールドを取得してから 'getWidgets()'を呼び出し、各ウィジェットから長方形を取得します(直接的なメソッドがあります)。たとえば、https://issues.apache.org/jira/browse/PDFBOX-142のファイルにあるラジオボタン(チェックマークのように見えますが、実際はラジオボタンです)は9個のウィジェットを持っています。 'Root/AcroForm /フィールド/ [9] /子供たち。 –

+0

@ Tomm23ティルマンさんと私のコメントはあなたを助けましたか?はいの場合は、あなたの解決策を説明するあなたの質問に対する実際の回答を作成した方がいいでしょう。いいえ、具体的に何を理解できませんでしたか? – mkl

答えて

1

フィールドは、いくつかのウィジェット(ラジオボタンは確かに、問題の下MKLでコメントが表示されます)、その後、ウィジェットのリストを持つことができるラジオボタンを入力している場合でも、に記載されています/キッズ配列は、あなたの人生を簡単にし、辞書に直接アクセスする代わりにPDFBoxが提供するメソッドを使用してください。添付されたコードは、PDFBOX-142号のファイルで動作します。フィールド "amt"は、チェックマークのように見えますが、ラジオボタンのフィールドに9つのウィジェットがあります。PDFDebuggerを実行し、 "表示"メニューに移動し、 "内部構造を表示"に変更してから、Root/AcroForm/

enter image description here

、プログラムで四角形を取得し、このコードを使用するには:

PDDocument document = PDDocument.load(new URL("https://issues.apache.org/jira/secure/attachment/12742551/Testformular1.pdf").openStream()); 
PDField field = document.getDocumentCatalog().getAcroForm().getField("amt"); 
System.out.println(field.getClass().getSimpleName()); 
for (PDAnnotationWidget widget : field.getWidgets()) 
{ 
    System.out.println(widget.getRectangle()); 
} 
document.close(); 

をそして、これが出力されます。

PDRadioButton 
[177.944,580.3095,190.1991,592.0744] 
[178.8963,350.25168,191.45924,361.8096] 
[535.79285,467.17078,548.0479,478.93567] 
[417.16348,467.17078,429.41858,478.93567] 
[298.04395,466.19037,310.29904,477.95526] 
[177.944,466.19037,190.1991,477.95526] 
[534.81244,581.2899,547.0675,593.0548] 
[417.16348,581.2899,429.41858,593.0548] 
[298.04395,581.2899,310.29904,593.0548] 

これらの位置を確認するには、PDFDebuggerでファイルを開く(「内部構造の表示」モードで開き、「表示」メニューで「ページを表示」を選択した場合)、マウスをレンダリングした画像上に移動すると座標がメインフレームの左下に表示されます。

関連する問題