Java如何创建和填充PDF表单域(代码示例)
本篇文章给大家带来的内容是关于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"); } }
生成的文档中,表单域将不可编辑,为只读状态
Atas ialah kandungan terperinci Java如何创建和填充PDF表单域(代码示例). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Kapsul adalah angka geometri tiga dimensi, terdiri daripada silinder dan hemisfera di kedua-dua hujungnya. Jumlah kapsul boleh dikira dengan menambahkan isipadu silinder dan jumlah hemisfera di kedua -dua hujungnya. Tutorial ini akan membincangkan cara mengira jumlah kapsul yang diberikan dalam Java menggunakan kaedah yang berbeza. Formula volum kapsul Formula untuk jumlah kapsul adalah seperti berikut: Kelantangan kapsul = isipadu isipadu silinder Dua jumlah hemisfera dalam, R: Radius hemisfera. H: Ketinggian silinder (tidak termasuk hemisfera). Contoh 1 masukkan Jejari = 5 unit Ketinggian = 10 unit Output Jilid = 1570.8 Unit padu menjelaskan Kirakan kelantangan menggunakan formula: Kelantangan = π × r2 × h (4

PHP dan Python masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1.Php sesuai untuk pembangunan web, dengan sintaks mudah dan kecekapan pelaksanaan yang tinggi. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan yang kaya.
