当前位置:Java -> 如何在Java中获取和设置PDF表单字段

如何在Java中获取和设置PDF表单字段

距离便携文档格式(PDF)进入新兴的数字文档世界已经有30多年了,可以说通用可互操作格式的概念仍然具有吸引力。称PDF为“流行”简直是一种严重的低估;它的普及程度几乎到了荒谬的地步。可以毫不夸张地说,世界上的每个人(只要有电脑)在生活中某个阶段都可能会与PDF格式的文档进行交互,而每个现代企业在某个阶段都依赖PDF作为其各种图像、应用程序、合同、发票等的导出格式。

PDF提供的一个主要商业优势(自1996年以来一直如此,尽管情况大不相同)是能够创建和共享可以进行数字填写的表单。和大多数数字化流程一样,这个过程的手动对应方式——即打印表格,手工填写,并且要么扫描它们要么存储它们以进行数字或实体存档——已经完全演变成了一种令人难以忍受的耐心练习,因为我们知道存在这样一种完全数字化的经验。

生成数字可访问的PDF表单的过程非常简单和方便。使用现代应用商店市场中可用的几十种专业PDF阅读器之一,我们可以通过几个点按步骤将自定义文本字段、复选框、单选按钮、组合框、列表框和按钮合并到我们的数字PDF文档中,并且这些元素都可以可靠地代表我们存储客户修改后的信息,通过完全绕过物理打印和重新上传的过程,节省了我们大量的时间和资源。

但便利并不仅限于此。在一个现代的数字世界中,分布式云托管服务不断扩展着软件架构的视野,我们可以迅速找到与我们的PDF表单进行交互的全新方式,甚至比以往更加自由地这样做,而且我们可以在我们自己定制的网络应用逻辑中以最小的开销(即最小的编码工作)来实现。一旦我们生成并存储了一个PDF表单的迭代,我们可以通过简单而安全的Web API请求快速地填写其表单字段的过程。

更具体地说,这意味着我们可以相当轻松地将客户端信息存储在标准的PDF表单中,而无需直接依赖于PDF表单/字段接口。例如,我们可以利用PDF表单,而无需将这些表单分发给客户(即通过客户端下载),也无需随后要求客户在完成后重新上传其PDF表单。他们可以在客户端面向的网络应用程序中简单地完成通常的填表过程——很可能是一个更简单、更干净、更愉快的界面,让用户获得更大的满意感——双方在后续都可以自动收到完成的表单的最终版本。

在本文的其余部分,我将演示两个可免费使用的API,分别用于1)列举PDF中已有的表单字段和值以及2)使用后续请求设置这些字段/值。这两个无状态服务在内存中处理文档并在完成后释放其数据缓存,因此可以安全可靠地处理敏感文档内容。

演示

我们可以利用提供在本页面底部的现成的Java代码示例来使用这两个 API 解决方案,并且可以使用一个免费的API密钥对我们的请求进行授权。

如上所述,我们可以使用第一个API调用来检索PDF文档中可用的表单字段对象列表。提醒一下,PDF表单可以包括文本字段、复选框、单选按钮、组合框、列表框和按钮。这将被构造如下示例:

{
  "Successful": true,
  "FormFields": [
    {
      "FieldName": "string",
      "FieldType": "string",
      "FieldValue": "string",
      "FieldComboBoxSelectedIndex": 0
    }
  ]
}


然后,我们可以利用第二个API调用来填充我们在初始调用中列举的表单字段。我们可以使用我们检索到的对象结构化我们的请求。

我们的第一步是安装Java SDK。我们通过Maven进行安装,首先在pom.xml中添加对存储库的引用:

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>


然后在pom.xml中添加对依赖项的引用:

<dependencies>
<dependency>
    <groupId>com.github.Cloudmersive</groupId>
    <artifactId>Cloudmersive.APIClient.Java</artifactId>
    <version>v4.25</version>
</dependency>
</dependencies>


现在,我们可以使用下面的代码来构造我们的API调用,以列举我们PDF文档中的表单字段。我们需要在这个请求中传递我们PDF的表单数据:

// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.EditPdfApi;

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");

EditPdfApi apiInstance = new EditPdfApi();
File inputFile = new File("/path/to/inputfile"); // File | Input file to perform the operation on.
try {
    PdfFormFields result = apiInstance.editPdfGetFormFields(inputFile);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling EditPdfApi#editPdfGetFormFields");
    e.printStackTrace();
}


最后,我们可以使用下面的代码来构造我们的API调用,以填充我们检索到的表单字段。我们需要在这个请求中传递我们PDF的表单数据和我们的表单字段:

// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.EditPdfApi;

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");

EditPdfApi apiInstance = new EditPdfApi();
SetPdfFormFieldsRequest fieldValues = new SetPdfFormFieldsRequest(); // SetPdfFormFieldsRequest | 
try {
    byte[] result = apiInstance.editPdfSetFormFields(fieldValues);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling EditPdfApi#editPdfSetFormFields");
    e.printStackTrace();
}


现在只需要配置一个愉快的用户界面来捕捉我们的客户端请求,我们就可以开始了。

推荐阅读: ai养猪火了

本文链接: 如何在Java中获取和设置PDF表单字段