首先,我不是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") );
我得到了结果“ [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 不要忘记在Java中键入CLASSPATH!我正在使用 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
有可能吗?如果是,那么它可以怎么做。
我可以修改现有PDF的字体吗。我有一些类型3(自定义)字体没有任何字体描述符。我想把它们换成一些有意义的字体。如何使用Itext或PDFBox执行此操作?
是否可以将给定的pdf文件变为空白,并将新数据重新写入该文件?我知道从中间删除页面可以修剪文档。但我根本没有找到任何方法来清除文档。非常感谢。
我正在使用Rest-Assured和GSON进行自动化测试,并且需要验证POST请求响应中返回的PDF文件的内容。文件的内容各不相同,可以包含任何内容,从文本到文本和表格,或者文本和表格和图形。就字形内容而言,每个页面都可能不同,而且很可能会不同。我只关心pdf页面上的所有文本——无论是纯文本,还是表格中的文本,或者是与图像相关的文本(或者是图像中的文本)。由于请求返回的所有pdf都是不同的,我无
问题内容: 我怎么知道我可以从对象/界面访问的字段?我尝试过反射,但看来您必须首先知道字段名称。如果我需要了解所有可用字段怎么办? 问题答案: 您可以使用该函数获取类型描述符。从那里,您可以列出存储在界面中的动态值的字段。 例: 输出: 调用的结果是一个值为,其中包含字段名称以及其他内容: 如果还需要这些字段的值,则可以使用获取,然后可以使用或: 输出: 在Go Playground上尝试一下。
我有一个要求,我必须使用Itext在PDF表单中填充值。 表单i具有多个具有相同字段名的字段。概念是在PDF表单字段名称通用的情况下填充相同的值。 因此,如果有两个或更多名为txtSysTime的字段,那么代码应该在所有字段中填充系统时间。 我的问题基本上是 Itext是否支持这种功能? 如果可能的话,我们怎么能做同样的事情呢 我正在使用以下代码进行相同的尝试: 使用此代码,第一个同名字段中的值将