2013-09-28 431 views
4

首先,我不是Java开发者:(我只需要小程序,它会根据现有pdf文件的字段名输出字段的坐标,当我输入时调用命令行我的课,这样的事情:Itext从现有的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); 

    } 
} 

但我有错误:“类型不匹配:不能从List转换为float []“。 当我替换

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

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

我得到的结果 “[[email protected]]”,但我需要浮动值。 你能帮我完成这个任务吗?

+0

“但它不工作” 是没有问题的描述。 –

+0

你得到的实际问题/错误是什么? –

+0

编辑过的文章.... – Footniko

回答

5

要彻底解决这个问题,我写了这个java类:在我的PHP程序,我可以用这个执行它们

javac GetSigPos.java 
java GetSigPos "MyForm.pdf" 

或者:

// 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"); 
    } 
    } 
} 

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

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 
+0

一个字段也可能有零个或多个可视化对象。 “getFieldPositions”返回一个“List”是有原因的...... – mkl