Java创建和填充PDF表单域方法

表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据。下面的示例中,将分享通过Java编程在PDF中添加以及填充表单域的方法。这里填充表单域可分为2种情况,一种是在创建表单域时填充,一种是加载已经创建好表单域的文档进行填充。此外,对于已经创建表单域并填写好的文档,也可以设置只读,防止修改、编辑。

要点概括:

1.创建表单域

2.填充表单域

3.设置表单域只读

工具:Free Spire.PDF for Java v2.0.0(免费版)

Jar文件导入

步骤1:在Java程序中新建一个文件夹可命名为Lib。并将产品包中的2个jar文件复制到新建的文件夹下。

步骤2:复制文件后,添加到引用类库:选中这两个jar文件,点击鼠标右键,选择“Build Path” – “Add to Build Path”。完成引用。

Java代码示例(供参考)

1.创建并填充PDF表单域

import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.fields.*;
import com.spire.pdf.graphics.*;

public class AddFormFieldsToPdf {

 public static void main(String[] args) throws Exception {

  //创建PdfDocument对象,并添加页面
  PdfDocument doc = new PdfDocument();
  PdfPageBase page = doc.getPages().add();

  //初始化位置变量
  float baseX = 100;
  float baseY = 0;

  //创建画刷对象
  PdfSolidBrush brush1 = new PdfSolidBrush(new PdfRGBColor(Color.BLUE));
  PdfSolidBrush brush2 = new PdfSolidBrush(new PdfRGBColor(Color.black));

  //创建TrueType字体
  PdfTrueTypeFont font= new PdfTrueTypeFont(new Font("Arial Unicode MS",Font.PLAIN,10),true); 

  //添加文本框
  String text = "姓名:";//添加文本
  page.getCanvas().drawString(text, font, brush1, new Point2D.Float(0, baseY));//在PDF中绘制文字
  Rectangle2D.Float tbxBounds = new Rectangle2D.Float(baseX, baseY , 150, 15);//创建Rectangle2D对象
  PdfTextBoxField textBox = new PdfTextBoxField(page, "TextBox");//创建文本框对象
  textBox.setBounds(tbxBounds);//设置文本框的Bounds
  textBox.setText("刘兴");//填充文本框
  textBox.setFont(font);//应用文本框的字体
  doc.getForm().getFields().add(textBox);//添加文本框到PDF域的集合
  baseY +=25;

  //添加复选框
  page.getCanvas().drawString("所在院系:", font, brush1, new Point2D.Float(0, baseY));
  java.awt.geom.Rectangle2D.Float rec1 = new java.awt.geom.Rectangle2D.Float(baseX, baseY, 15, 15);
  PdfCheckBoxField checkBoxField = new PdfCheckBoxField(page, "CheckBox1");//创建第一个复选框对象
  checkBoxField.setBounds(rec1);
  checkBoxField.setChecked(false);//填充复选框
  page.getCanvas().drawString("经管系", font, brush2, new Point2D.Float(baseX + 20, baseY));
  java.awt.geom.Rectangle2D.Float rec2 = new java.awt.geom.Rectangle2D.Float(baseX + 70, baseY, 15, 15);
  PdfCheckBoxField checkBoxField1 = new PdfCheckBoxField(page, "CheckBox2");//创建第二个复选框对象
  checkBoxField1.setBounds(rec2);
  checkBoxField1.setChecked(true);//填充复选框
  page.getCanvas().drawString("创新班", font, brush2, new Point2D.Float(baseX+90, baseY));
  doc.getForm().getFields().add(checkBoxField);//添加复选框到PDF
  baseY += 25;

  //添加列表框
  page.getCanvas().drawString("录取批次:", font, brush1, new Point2D.Float(0, baseY));
  java.awt.geom.Rectangle2D.Float rec = new java.awt.geom.Rectangle2D.Float(baseX, baseY, 150, 50);
  PdfListBoxField listBoxField = new PdfListBoxField(page, "ListBox");//创建列表框对象
  listBoxField.getItems().add(new PdfListFieldItem("第一批次", "item1"));
  listBoxField.getItems().add(new PdfListFieldItem("第二批次", "item2"));
  listBoxField.getItems().add(new PdfListFieldItem("第三批次", "item3"));;
  listBoxField.setBounds(rec);
  listBoxField.setFont(font);
  listBoxField.setSelectedIndex(0);//填充列表框
  doc.getForm().getFields().add(listBoxField);//添加列表框到PDF
  baseY += 60;

  //添加单选按钮
  page.getCanvas().drawString("招收方式:", font, brush1, new Point2D.Float(0, baseY));
  PdfRadioButtonListField radioButtonListField = new PdfRadioButtonListField(page, "Radio");//创建单选按钮对象
  PdfRadioButtonListItem radioItem1 = new PdfRadioButtonListItem("Item1");//创建第一个单选按钮
  radioItem1.setBounds(new Rectangle2D.Float(baseX, baseY, 15, 15));
  page.getCanvas().drawString("全日制", font, brush2, new Point2D.Float(baseX + 20, baseY));
  PdfRadioButtonListItem radioItem2 = new PdfRadioButtonListItem("Item2");//创建第二个单选按钮
  radioItem2.setBounds(new Rectangle2D.Float(baseX + 70, baseY, 15, 15));
  page.getCanvas().drawString("成人教育", font, brush2, new Point2D.Float(baseX + 90, baseY));
  radioButtonListField.getItems().add(radioItem1);
  radioButtonListField.getItems().add(radioItem2);
  radioButtonListField.setSelectedIndex(0);//选择填充第一个单选按钮
  doc.getForm().getFields().add(radioButtonListField);//添加单选按钮到PDF
  baseY += 25;

  //添加组合框
  page.getCanvas().drawString("最高学历:", font, brush1, new Point2D.Float(0, baseY));
  Rectangle2D.Float cmbBounds = new Rectangle2D.Float(baseX, baseY, 150, 15);//创建cmbBounds对象
  PdfComboBoxField comboBoxField = new PdfComboBoxField(page, "ComboBox");//创建comboBoxField对象
  comboBoxField.setBounds(cmbBounds);
  comboBoxField.getItems().add(new PdfListFieldItem("博士", "item1"));
  comboBoxField.getItems().add(new PdfListFieldItem("硕士", "itme2"));
  comboBoxField.getItems().add(new PdfListFieldItem("本科", "item3"));
  comboBoxField.getItems().add(new PdfListFieldItem("大专", "item4"));
  comboBoxField.setSelectedIndex(0);
  comboBoxField.setFont(font);
  doc.getForm().getFields().add(comboBoxField);//添加组合框到PDF
  baseY += 25;

  //添加签名域
  page.getCanvas().drawString("本人签字确认\n以上信息属实:", font, brush1, new Point2D.Float(0, baseY));
  PdfSignatureField sgnField= new PdfSignatureField(page,"sgnField");//创建sgnField对象
  Rectangle2D.Float sgnBounds = new Rectangle2D.Float(baseX, baseY, 150, 80);//创建sgnBounds对象
  sgnField.setBounds(sgnBounds);
  doc.getForm().getFields().add(sgnField);//添加sgnField到PDF
  baseY += 90;

  //添加按钮
  page.getCanvas().drawString("", font, brush1, new Point2D.Float(0, baseY));
  Rectangle2D.Float btnBounds = new Rectangle2D.Float(baseX, baseY, 50, 15);//创建btnBounds对象
  PdfButtonField buttonField = new PdfButtonField(page, "Button");//创建buttonField对象
  buttonField.setBounds(btnBounds);
  buttonField.setText("提交");//设置按钮显示文本
  buttonField.setFont(font);
  doc.getForm().getFields().add(buttonField);//添加按钮到PDF 

  //保存文档
  doc.saveToFile("result.pdf", FileFormat.PDF);
 }
}

创建(填充)效果:

2.加载并填充已有的表单域文档

测试文档如下:

import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.fields.PdfField;
import com.spire.pdf.widget.*;

public class FillFormField_PDF{
 public static void main(String[] args){

  //创建PdfDocument对象,并加载PDF文档
  PdfDocument doc = new PdfDocument();
  doc.loadFromFile("output.pdf");

  //获取文档中的域
  PdfFormWidget form = (PdfFormWidget) doc.getForm();
  //获取域控件集合
  PdfFormFieldWidgetCollection formWidgetCollection = form.getFieldsWidget();

  //遍历域控件并填充数据
  for (int i = 0; i < formWidgetCollection.getCount(); i++) {

   PdfField field = formWidgetCollection.get(i);
   if (field instanceof PdfTextBoxFieldWidget) {
    PdfTextBoxFieldWidget textBoxField = (PdfTextBoxFieldWidget) field;
    textBoxField.setText("吴 敏");
   }
   if (field instanceof PdfCheckBoxWidgetFieldWidget) {
    PdfCheckBoxWidgetFieldWidget checkBoxField = (PdfCheckBoxWidgetFieldWidget) field;
    switch(checkBoxField.getName()){
    case "CheckBox1":
     checkBoxField.setChecked(true);
     break;
    case "CheckBox2":
     checkBoxField.setChecked(true);
     break;
    }
   }
   if (field instanceof PdfRadioButtonListFieldWidget) {
    PdfRadioButtonListFieldWidget radioButtonListField = (PdfRadioButtonListFieldWidget) field;
    radioButtonListField.setSelectedIndex(1);
   }
   if (field instanceof PdfListBoxWidgetFieldWidget) {
    PdfListBoxWidgetFieldWidget listBox = (PdfListBoxWidgetFieldWidget) field;
    listBox.setSelectedIndex(1);
   }

   if (field instanceof PdfComboBoxWidgetFieldWidget) {
    PdfComboBoxWidgetFieldWidget comboBoxField = (PdfComboBoxWidgetFieldWidget) field;
    comboBoxField.setSelectedIndex(1);
   }
  }

  //保存文档
  doc.saveToFile("FillFormFields.pdf", FileFormat.PDF);
 }
}

填充效果:

3.限制表单域编辑(只读)

import com.spire.pdf.PdfDocument;

public class FieldReadonly_PDF {
 public static void main(String[] args) throws Exception {
 {
 //创建PdfDocument对象,并加载包含表单域的PDF文档
 PdfDocument pdf = new PdfDocument();
 pdf.loadFromFile("test.pdf");

  //将文档中的所有表单域设置为只读
  pdf.getForm().setReadOnly(true);

  //保存文档
  pdf.saveToFile("result.pdf");
  }
 }

生成的文档中,表单域将不可编辑,为只读状态

(0)

相关推荐

  • java使用jacob实现word转pdf

    背景:日常开发ERP系统,会有一些工单或者合同之类需要填写打印.我们就会将其word模板来通过系统自动化填写并转换为PDF格式(PDF文件打印可保证文件质量,是一种通用的格式.文件不易去修改,比较稳定).所以我们将通过jacob来实现这些功能. 准备工作: 1.服务器需要安装office2007,因为我们就是调用这个来实现转换. 2.需要安装插件jacob,安装jacob-1.14.3-x86.dll到jdk\jdk1.7.0\jre\bin(你自己电脑安装的jdk) 3.需要使用jacob-1

  • Java实现PDF打印的解决方案

    1.Java Print Service Java Print Service是Java自带的打印框架,所在的包javax.print.PrintService;. 实现PDF打印的代码流程如下 //1.得到一个文件的输入流 FileInputStream fiStream; try { psStream = new FileInputStream("./sample.PDF"); } catch (FileNotFoundException ffne) { } if (psStrea

  • java通过PDF模板填写PDF表单

    本文实例为大家分享了java通过PDF模板填写PDF表单的具体代码,包括图片,供大家参考,具体内容如下 需要用到的java包: itext.jar.iTextAsian.jar的JAR包.这个包里面定义了与中文输出相关的一些文件. 编写的表单如下: import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap;

  • Java设置PDF有序和无序列表的知识点总结

    文档中的设置有序或无序列表是一种反应内容上下级关系或者内容相同属性的方式,与单纯的文字叙述相比,它能有效增强文档内容的条理性,突出重点.因此,本文将分享通过Java编程在PDF文档中设置有序或无序列表的方法. 使用工具:Free Spire.PDF for Java V2.2.2(免费版) Jar文件导入: Step1:在Java程序中新建一个文件夹可命名为Lib.并将下载包中的jar文件(如下图)复制到新建的文件夹下. Step2:复制文件后,添加到引用类库:选中这个jar文件,点击鼠标右键,

  • java实现在pdf模板的指定位置插入图片

    本文实例为大家分享了java在pdf模板的指定位置插入图片的具体代码,供大家参考,具体内容如下 java操作pdf有个非常好用的库itextpdf,maven: <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.6</version> </dependency> <!--

  • java利用jacob将word转pdf

    本文实例为大家分享了java开发利用jacob将word转pdf的具体代码,供大家参考,具体内容如下 jacob 缺点:需要 window 环境,而且速度是最慢的需要安装 msofficeWord 以及 SaveAsPDFandXPS.exe ( word 的一个插件,用来把 word 转化为 pdf ) 开发流程: SaveAsPDFandXPS 下载地址 jacob 包下载地址: 1.先安装SaveAsPDFandXPS 2.下载 jacob 解压后存放路径: jacob.jar 放在 C:

  • java使用PDFRenderer实现预览PDF功能

    本文实例为大家分享了java使用PDFRenderer实现预览PDF功能,供大家参考,具体内容如下 需要一个jar PDFRenderer-0.9.0.jar package com.wonders.stpt.attach.action; import java.awt.Image; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInp

  • Java创建和填充PDF表单域方法

    表单域,可以按用途分为多种不同的类型,常见的有文本框.多行文本框.密码框.隐藏域.复选框.单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据.下面的示例中,将分享通过Java编程在PDF中添加以及填充表单域的方法.这里填充表单域可分为2种情况,一种是在创建表单域时填充,一种是加载已经创建好表单域的文档进行填充.此外,对于已经创建表单域并填写好的文档,也可以设置只读,防止修改.编辑. 要点概括: 1.创建表单域 2.填充表单域 3.设置表单域只读 工具:Free Spire.PDF for

  • JAVA防止重复提交Web表单的方法

    本文实例讲述了JAVA防止重复提交Web表单的方法.分享给大家供大家参考,具体如下: package cn.com.form; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Random; import javax.servlet.ServletException; import java

  • Bootbox将后台JSON数据填充Form表单的实例代码

    序言: 刚结束公司的三个月试用期,意味着我即将正式步入社会成为广大从事IT行业的一员.作为一个编程小白,无论从技术层面还是知识层面都是比较薄弱的,想要成为一个优秀的程序员不断的学习与探索是不可避免的.我相信一切的付出与收获是成正比的!Fighting! 这几天在做公司的实际项目的时候,需要实现选中Bootstrap table中的任意一行数据点击编辑按钮弹出一个模态框以表单的形式对该行数据进行编辑.获取表格行的数据是比较方便的,具体可以查找Bootstrap table参考文档,具体地址可以直接

  • jQuery表单域选择器用法分析

    本文实例分析了jQuery表单域选择器用法.分享给大家供大家参考.具体如下: 表单域是指网页中的input,textarea, select和button元素. 1. :input选择器 复制代码 代码如下: $(":input") 2. :text选择器 复制代码 代码如下: $(":text") 3. :password选择器 复制代码 代码如下: $(":password") 4. :radio选择器 复制代码 代码如下: $("

  • jQuery表单域属性过滤器用法分析

    本文实例讲述了jQuery表单域属性过滤器用法.分享给大家供大家参考.具体分析如下: 表单内包含各种各样的表单域,使用表单域属性选择器可以很好的获取已被选中的单选按钮,复选框以及列表项,也可以根据是否可用从文档中查找表单域. 1. :checked选择器 用于选择所有被选中的表单域.格式: 复制代码 代码如下: $("selector:checked") 可以是input,radio和checkbox 2. :enabled选择器 用于选择所有可用的表单域,格式: 复制代码 代码如下:

  • javascript表单域与json数据间的交互第1/3页

    包括对象中有集合属性.对象中引用其他对象属性: 复制代码 代码如下: /** **json对象数据设置到表单域中 */ function jsonObjectToForm(form, jsonObject){     for(i = 0, max = form.elements.length; i < max; i++) {         e = form.elements[i];         eName = e.name;         if(eName.indexOf('.') >

  • js实现文件上传表单域美化特效

    一款效果非常时尚的文件上传表单域美化特效,下面给出制作的简要教程. 先上几个效果饱饱眼福: 使用方法 这些文件上传域的美化使用的方法都是隐藏原生的<input type="file">元素,然后使用一个<label>元素来制作美化效果.  HTML结构 该文件上传域美化效果最基本的HTML结构如下: <input type="file" name="file" id="file" class=&q

  • php实现跨域提交form表单的方法【2种方法】

    本文实例讲述了php实现跨域提交form表单的方法.分享给大家供大家参考,具体如下: 有时我们为了网站安全考虑,我们不允许直接跨域提交form表单数据,如果我们自己有这个需求呢?下面我们来介绍两种跨域的方法解决直接跨域问题. 下面我们来看看两种php跨域提交form的方法 一.通过php curl function curlPost($url,$params) { $postData = ''; foreach($params as $k => $v) { $postData .= $k . '

  • javascript创建动态表单的方法

    本文实例讲述了javascript创建动态表单的方法.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>

随机推荐