2013-09-28 429 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