Itext从现有的pdf获取字段坐标

首先,我不是Java开发人员:(我只需要一个小程序,它将输出到现场的PDF文件的字段名字段的坐标,当我从命令行调用我的类,我会键入这样的事情:

javac GetField.java java GetField <myForm.pdf>, <myFieldName> 

我在我的服务器上使用itext。 现在我试图运行简单的代码:

 import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; import java.io.*; import java.util.*; import java.awt.List; class HelloWorld{ public static void main(String[] args) throws IOException { PdfReader reader = new PdfReader("Noname.pdf"); AcroFields fields = reader.getAcroFields(); float[] positions = fields.getFieldPositions("Signature"); System.out.println( positions ); } } 

但我有错误:“types不匹配:不能从列表转换为浮动[]”。 当我replace

 float[] positions = fields.getFieldPositions("Signature"); System.out.println( positions ); 

 System.out.println( fields.getFieldPositions("Signature") ); 

我得到了结果“ [com.itextpdf.text.pdf.AcroFields$FieldPosition@36af35b1] ”,但我需要浮动值。 你能帮我完成这个任务吗?

要彻底解决这个问题,我写了这个java类:

 // GetSigPos.java import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; import java.io.*; //import java.util.*; import java.util.List; //import java.awt.List; class GetSigPos { public static void main(String[] args) throws IOException { String pdfFile = args[0]; PdfReader reader = new PdfReader(pdfFile); AcroFields fields = reader.getAcroFields(); for(String signame : fields.getBlankSignatureNames()) { List<AcroFields.FieldPosition> positions = fields.getFieldPositions(signame); Rectangle rect = positions.get(0).position; // In points: float left = rect.getLeft(); float bTop = rect.getTop(); float width = rect.getWidth(); float height = rect.getHeight(); int page = positions.get(0).page; Rectangle pageSize = reader.getPageSize(page); float pageHeight = pageSize.getTop(); float top = pageHeight - bTop; System.out.print(signame + "::" + page + "::" + left + "::" + top + "::" + width + "::" + height + "\n"); } } } 

然后我可以在命令行中运行它:

 javac GetSigPos.java java GetSigPos "MyForm.pdf" 

或者在我的PHP程序中,我可以使用这个命令执行它们:

 exec('java -cp .:/usr/local/bin/pdfbox/itextpdf-5.4.4.jar:/usr/local/bin/pdfbox GetSigPos "'.$pdfName.'" 2>&1', $output); echo '<pre>'; print_r($output); echo '</pre>'; 

PS不要忘记键入CLASSPATH到您的Java! 我正在使用Centos 6

 vi /root/.bash_rofile 

然后输入:

 export JAVA_HOME=/usr/lib/jvm/jre-1.5.0-gcj export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:/usr/local/bin/pdfbox/itextpdf-5.4.4.jar:/usr/local/bin/pdfbox