2017-04-17 20 views
1

您好,我使用此代碼獲取PDF中組件的位置。但是,如果字段的類型是單選框,然後fieldAreaArray = NULL如何使用PDFbox獲取Radiobutton的位置

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

您必須意識到表單字段和其可視化小工具之間的pdf有所不同。如果一個表單域只有一個可視化對象,那麼建模表單域的pdf對象和對可視化對象建模的pdf對象可以合併爲一個對象。只有在這種合併的情況下,你的代碼才能工作。另一方面,單選按鈕表單字段很少只有一個小部件,因爲表單字段表示整個連接的單選按鈕組的狀態。 – mkl

+0

@ Tomm23最好的方法是使用PDFDebugger查看文件。更改爲「顯示內部結構」,然後查看Root/AcroForm/Fields。重新構建小部件,獲取您的字段,然後調用getWidgets(),然後從每個小部件獲取矩形(有一個直接的方法)。例如,https://issues.apache.org/jira/browse/PDFBOX-142中的文件中的單選按鈕(看起來像複選標記,但它們實際上是單選按鈕)有9個小部件,請參閱'Root/AcroForm /場/ [9]/Kids'。 –

+0

@ Tomm23有Tilman的和我的評論幫助你?如果是的話,如果您爲描述解決方案的問題創建了實際的答案,那將會很好。如果不是,你有什麼具體的不明白? – mkl

回答

1

字段可以有多個部件(單選按鈕肯定會,看到這個問題下面MKL的註釋),然後窗列表會在發現/ Kids數組,所以讓你的生活變得簡單,並使用PDFBox提供的方法,而不是直接訪問字典。附帶的代碼適用於PDFBOX-142問題中的文件。字段「amt」雖然看起來像一個複選標記,但卻是帶有9個小部件的單選按鈕字段 - 運行PDFDebugger並轉到「查看」菜單,並更改爲「顯示內部結構」,然後查看Root/AcroForm/Fields:

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打開文件來驗證這些位置(如果已經在「顯示內部結構」模式中打開,然後在「查看」菜單中選擇「顯示頁面」)並將鼠標移動到渲染圖像上,座標將爲顯示在主框架的左下角。