2017-08-17 35 views
0

我想要獲得PDF字段的絕對位置,我的代碼如下所示。計算PDF表單中字段的絕對位置

.....

float[] _advisor = reader.getAcroFields().getFieldPositions("_advisor"); 
float[] _test = reader.getAcroFields().getFieldPositions("_test"); 
float[] _owner = reader.getAcroFields().getFieldPositions("_owner"); 

所有字段垂直排列相同_Left位置。問題是前兩個字段在PDF的同一頁上,xLeft的值相同,但Last字段_owner在第二頁上,xLeft的值關閉很多。我是否需要爲不同頁面中的頁面減去偏移量?

+0

*關閉的一個大數額* - 相比呢? IText,甚至 您使用的舊版本,按原樣返回PDF中的值,因此它是確切的。可能吧,但是,你的預期座標系是錯誤的。 – mkl

回答

0

有些事情要考慮:

  • 缺省座標使用的iText正其在頁面的左下角原點。
  • iText將以點爲單位返回座標,而不是以像素爲單位。
  • 您可以使用Adobe Reader顯示標尺和網格疊加層,這使您可以輕鬆測量每個組件的位置。檢查這些讀數是否與iText爲您提供的值相同。

如果您仍然認爲iText給您提供了錯誤的值,請提供我們對您pdf的訪問權限,並向我們提供您期望收到的值(以及爲什麼)。

0

一個可能的問題可能是您的媒體盒的定位不同於0,0。我需要的,一旦讓我「正常化」的值是這樣的:

PdfDictionary pageDict = reader.getPageN(pageNumber); 
PdfArray mediaBox = (PdfArray)PdfReader.getPdfObject(pageDict.get(PdfName.MEDIABOX)); 

//check whether the mediabox has a different positioning than 0,0 
if(((PdfNumber)mediaBox.getPdfObject(0)).floatValue()!=0){ 
    //normalize X coordinates 
    lowerLeftX = lowerLeftX-(PdfNumber)mediaBox.getPdfObject(0)).floatValue(); 
    upperRightX = upperRightX-((PdfNumber)mediaBox.getPdfObject(0)).floatValue(); 
} 
if(((PdfNumber)mediaBox.getPdfObject(1)).floatValue()!=0){ 
//normalize Y coordinates 
lowerLeftY = lowerLeftY-((PdfNumber)mediaBox.getPdfObject(1)).floatValue(); 
upperRightY = upperRightY-((PdfNumber)mediaBox.getPdfObject(1)).floatValue(); 
}