`

Java 创建、填充PDF表单域

阅读更多

 表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等。下面的示例中,将分享通过Java编程在PDF中添加以及填充表单域的方法。包括:文本框、复选框、单选按钮、列表框、组合框、签名域、按钮等。

这里填充表单域可分为2种情况,一种是在创建表单域时填充,一种是加载已经创建好表单域的文档进行填充。此外,对于已经创建表单域并填写好的文档,也可以设置只读,防止修改、编辑等。

 

要点概括:

1.创建表单域

2.填充表单域

3.设置表单域只读

 

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

 

Jar文件获取及导入:

方法1通过官网下载jar文件包。下载后,解压文件,并将lib文件夹下的Spire.Pdf.jar文件导入到java程序。

方法2可通过maven仓库安装导入到maven项目。

 

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

 

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

(本文完)

 

  • 大小: 80.6 KB
  • 大小: 71.8 KB
  • 大小: 74.4 KB
分享到:
评论

相关推荐

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

    在Java编程中,创建和填充PDF表单域是一项常见的任务,尤其在数据处理和报告生成领域。本篇文章将深入探讨如何使用Java实现这一功能,并提供一个详细的步骤和示例代码。 首先,表单域是PDF文档中用于用户交互的重要...

    java一键pdf转图片及pdf域填充,封装好的工具类

    在Java开发中,处理PDF文件是一项常见的任务,包括转换PDF为图片以及对PDF进行域填充。这个封装好的工具类——EasyPDFUtil,提供了一种高效且便捷的方式来完成这些操作。以下是对这些功能的详细说明: 1. **PDF转...

    基于Itext7的Java PDF表单域填充命令行工具设计源码

    该项目为基于Itext7的Java PDF表单域填充工具,源码包含24个文件,包括16个Java源文件、3个Markdown文档、1个Git忽略文件、1个许可证文件、1个PNG图片文件、1个XML文件、1个字体文件。通过命令行参数封装,用户可...

    填充pdf模板源码和jar包

    创建模板时,要确保每个表单域都有唯一的名称,以便于在编程时定位它们。 在编程层面,我们可以使用各种库或API来实现PDF模板的填充。这些库通常支持Java、Python、C#等编程语言。在这个案例中,我们关注的是Java...

    java操作PDF表单

    Java 操作 PDF 表单是一项常见的任务,尤其在企业级应用中,经常需要对 PDF 文件进行数据填充、签名等操作。Java 提供了多种库来处理 PDF 文档,其中包括 Apache PDFBox、iText 和 Flying Saucer 等。在这个主题中,...

    免费版 PDF Java组件_Free Spire.PDF for Java 1.1.0

    支持绘制文本,图像和形状到 PDF,从 PDF 文件中提取文本,创建和填充 PDF 表单域。 Free Spire.PDF for JAVA 支持创建 PDF/A-1 文档。 2. 高质量的 PDF 文档转换。 支持将 PDF 文档转换为 XPS,和高品质的图像文件...

    Free Spire.PDF for JAVA

    Free Spire.PDF for JAVA可以支持许多功能,例如从PDF中提取文本,在PDF文档中绘制文本/图像/形状,创建和填充表单域,创建 PDF/A-1,添加和验证 PDF 数字签名。 此外,Free Spire.PDF for JAVA 支持将PDF 转换为...

    itext7 根据pdf模板填充图像框

    itext7是一款功能强大的PDF处理库,支持Java等多种语言,能够帮助开发者轻松实现PDF的创建、修改等功能。 #### 二、需求分析 本案例的核心需求是根据已有的PDF模板来填充图片,并最终生成完整的PDF文档。这在实际...

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

    Java实现PDF模板指定位置插入图片 Java语言是当今最流行的编程语言之一,对于PDF文档的处理有着非常广泛的应用。本文将详细介绍如何使用Java语言在PDF模板的指定位置插入图片,实现对PDF文档的自定义和编辑。 ...

    java PDF文件处理库 aspose-pdf-17.8.jar ,好用

    4. **表单处理**:允许填充交互式表单字段,也可以创建和编辑Acrobat表单域。 5. **图像处理**:可以插入、提取、替换和旋转PDF文档中的图像,支持多种图像格式。 6. **安全与权限管理**:可以设置密码保护,限制...

    Aspose pdf for java 3.3.0

    6. **表单处理**:支持交互式PDF表单的创建、填充和导出,包括Acrobat表单域和数据的处理。 7. **安全性和权限管理**:设置PDF文档的访问密码,限制打印、复制、编辑等操作,以保护文档内容的安全。 8. **数字签名...

    动态生成PDF文档的Java实现

    Acrobat表单提供了一种电子化填充PDF文档表单的能力,它允许在PDF文档上添加表单域和按钮,这实质上是在原始PDF文档之上增加了一个数据层。为了在客户端和服务器端之间传输表单数据,需要使用特定的数据传输格式,...

    springboot实现根据指定pdf、word模板文件填充值到文件里面,生成对应的文件

    5. **使用iText处理PDF**:对于PDF文件,加载模板,然后使用iText的`PdfReader`和`PdfStamper`类找到并替换模板中的AcroFields(PDF表单域)。 6. **生成新文件**:完成替换后,使用POI或iText保存为新的Word或PDF...

    itext对pdf进行编辑

    itext对pdf进行编辑.使用Adobe对pdf创建表单,itext对表单填充,下拉选,单选,文本框.复选框.itext对pdf进行编辑.使用Adobe对pdf创建表单,itext对表单填充,下拉选,单选,文本框.复选框

    itext设置段落行间距.zip

    iText提供了一套丰富的API来处理PDF表单,包括读取、修改和填充表单域。以下是一个基本的表单填充示例: 1. 加载PDF模板文件,获取AcroFields对象:`PdfReader reader = new PdfReader("template.pdf"); AcroFields...

    ITextJava编写PDF

    5. **表单处理**:IText还支持创建和填充PDF表单。`AcroFields`类用于处理表单域,可以设置文本、选择或多选框的值。例如: ```java PdfReader reader = new PdfReader("template.pdf"); PdfStamper stamper = ...

    官方最新itextpdf-5.5.8.jar+中文支持包itext-asian.jar

    4. **表单处理**:可以填充交互式PDF表单,提取数据或创建新的表单域。 5. **安全性**:提供数字签名和加密功能,保护PDF文档不被篡改。 6. **事件处理**:通过监听器机制,可以在PDF文档的不同阶段执行自定义操作,...

    itextpdf.jar 5.5.5.rar

    通过`AcroFields`类,可以添加、编辑和读取PDF表单域,包括文本框、复选框、单选按钮等。同时,还可以设置表单域的默认值、验证规则以及动作触发器,确保用户提交的数据符合预期。 四、PDF签名和安全 iTextPDF提供...

    基于Java的用iText类库制作PDF文档.zip

    - **处理PDF表单**:iText也支持读写PDF表单域。 - **数字签名**:可以对PDF文档进行数字签名,以验证其完整性和来源。 在实际应用中,开发者通常会创建一个自定义的`PdfGenerator`类,封装上述操作,以便在不同...

    C# PDF操作类 PDF

    它支持PDF的读写操作,可以插入图片、添加链接、创建表单域以及签署PDF文档。如果你需要对PDF进行更复杂的操作,如加密、解密或填充表单,iTextSharp是一个不错的选择。 4. **PDF Creator Pilot**: 这是一个用于...

Global site tag (gtag.js) - Google Analytics