以PDF格式计算字段的绝对位置

时间:2017-08-17 17:36:19

标签: java pdf itext

我正在尝试获取PDF字段的绝对位置,我的代码如下。

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

所有字段都垂直对齐相同的左侧位置。

问题是前两个字段在PDF的同一页面上,xLeft的值是相同的,但是Last字段_owner在第二页上,xLeft的值大量关闭。我是否需要为不同页面中的页面减去偏移量或其他内容?

2 个答案:

答案 0 :(得分:0)

需要考虑的一些事项:

  • iText使用的默认坐标的原点位于页面的左下角。
  • iText将返回以点为单位的坐标,而不是以像素为单位。
  • 您可以使用Adobe Reader显示标尺和网格覆盖,这使您可以轻松地测量每个组件的位置。检查这些读数是否与iText为您提供的值相同。

如果您仍然认为iText给您错误的价值,请向我们提供您的pdf访问权限,并向我们提供您希望收到的价值(及其原因)。

答案 1 :(得分: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();
}