对于希望分析和利用从 PDF 表单中收集到的信息的企业来说,从 PDF 表单中提取值是一项至关重要的任务。例如,一家公司可能会使用 PDF 表单来收集客户的联系方式或对产品、服务的反馈意见。通过提取 PDF 表单数据,公司可以轻松地将信息输入数据库,以便进一步分析和跟进。本文将介绍如何使用 Spire.PDF for Java 通过 Java 代码提取 PDF 表单中的值。
安装 Spire.PDF for Java
首先,您需要在 Java 程序中添加 Spire.Pdf.jar 文件作为依赖项。JAR 文件可以从此链接下载。如果您使用 Maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而在应用程序中导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>10.11.2</version>
</dependency>
</dependencies>
Java 提取 PDF 表单域的值
Spire.PDF for Java 支持各种类型的 PDF 表单域,包括:
- 文本框(由 PdfTextBoxFieldWidget 类表示)
- 复选框(由 PdfCheckBoxWidgetFieldWidget 类表示)
- 单选按钮(由 PdfRadioButtonListFieldWidget 类表示)
- 列表框(由 PdfListBoxWidgetFieldWidget 类表示)
- 组合框(由 PdfComboBoxWidgetFieldWidget 类表示)
在从 PDF 表单域中提取数据之前,需要先确定每个表单域的具体类型,然后就可以通过对应表单域类下的属性来准确提取它们的值了。具体步骤如下:
- 创建一个 PdfDocument 类的对象。
- 使用 PdfDocument.loadFromFile() 方法加载 PDF 文档。
- 使用 PdfDocument.getForm() 属性获取 PDF 文档中的表单。
- 创建一个 StringBuilder 对象来储存提取的表单域的值。
- 遍历所有 PDF 表单域。
- 确定表单域的类型,然后使用相应的属性获取表单域的名称和值。
- 将获取的数据写入 txt 文本文件。
- Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.fields.PdfField;
import com.spire.pdf.widget.*;
import java.io.FileWriter;
import java.io.IOException;
public class ReadPdfFormValues {
public static void main(String[] args) throws Exception{
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
//加载PDF文档
pdf.loadFromFile("PDF表单.pdf");
//创建StringBuilder对象
StringBuilder sb = new StringBuilder();
//获取PDF表单
PdfFormWidget formWidget = (PdfFormWidget)pdf.getForm();
//遍历所有表单域
for (int i = 0; i < formWidget.getFieldsWidget().getList().size(); i++)
{
PdfField field = (PdfField)formWidget.getFieldsWidget().getList().get(i);
//获取文本框的名称和值
if (field instanceof PdfTextBoxFieldWidget)
{
PdfTextBoxFieldWidget textBoxField = (PdfTextBoxFieldWidget)field ;
String text = textBoxField.getName();
String value = textBoxField.getText();
sb.append("文本框名: " + text + "\r\n");
sb.append("文本框内容: " + value + "\n\r");
}
//获取列表框的名称
if (field instanceof PdfListBoxWidgetFieldWidget)
{
PdfListBoxWidgetFieldWidget listBoxField = (PdfListBoxWidgetFieldWidget)field;
String name = listBoxField.getName();
sb.append("列表框名: " + name + "\r\n");
//获取列表框中的项目
sb.append("列表框内容: \r\n");
PdfListWidgetItemCollection items = listBoxField.getValues();
for (int j = 0; j < items.getCount(); j ++)
{
sb.append( items.get(j).getValue() + "\r\n");
}
//获取列表框的选中项
String selectedValue = listBoxField.getSelectedValue();
sb.append("列表框选中内容: " + selectedValue + "\n\r");
}
//获取组合框的名称
if (field instanceof PdfComboBoxWidgetFieldWidget)
{
PdfComboBoxWidgetFieldWidget comBoxField = (PdfComboBoxWidgetFieldWidget)field;
String name = comBoxField.getName();
sb.append("组合框名: " + name + "\r\n");
//获取组合框中的项目
sb.append("组合框内容: \r\n");
PdfListWidgetItemCollection items = comBoxField.getValues();
for (int j = 0; j < items.getCount(); j ++)
{
sb.append( items.get(j).getValue() + "\r\n");
}
//获取组合框的选中项
String selectedValue = comBoxField.getSelectedValue();
sb.append("组合框选中内容: " + selectedValue + "\n\r");
}
//获取单选按钮的名称和选中项
if (field instanceof PdfRadioButtonListFieldWidget)
{
PdfRadioButtonListFieldWidget radioBtnField = (PdfRadioButtonListFieldWidget)field;
String name = radioBtnField.getName();
String value = radioBtnField.getValue();
sb.append("单选按钮名: " + name + "\r\n");
sb.append("单选按钮选中内容: " + value + "\n\r");
}
//获取复选框的名称和状态
if (field instanceof PdfCheckBoxWidgetFieldWidget)
{
PdfCheckBoxWidgetFieldWidget checkBoxField = (PdfCheckBoxWidgetFieldWidget)field;
String name = checkBoxField.getName();
sb.append("复选框名: " + name + "\r\n");
boolean state = checkBoxField.getChecked();
sb.append("复选框是否被选中: " + state + "\n\r");
}
}
//将获取的数据写入txt文本文件
writeStringToTxt(sb.toString(), "读取PDF表单.txt");
}
public static void writeStringToTxt(String content, String txtFileName) throws IOException {
FileWriter fWriter = new FileWriter(txtFileName, true);
try {
fWriter.write(content);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
fWriter.flush();
fWriter.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。