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 );

}

}

但是我有一个错误:“类型不匹配:无法从列表转换为float []”。当我更换

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

System.out.println( positions );

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

我得到了结果“

”,但是我需要浮点值。您能帮我完成这个任务吗?

回答:

为了完全解决问题,我编写了以下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>';

不要忘记在Java中键入CLASSPATH!我正在使用 :

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

以上是 itext从现有的pdf获取字段坐标 的全部内容, 来源链接: utcz.com/qa/398607.html

回到顶部