有時候,我們需要製作一個Word模板檔案,然後發給使用者填寫,但我們希望使用者只能在指定位置填寫內容,其他內容不允許編輯和修改。這時候我們就可以通過表單控制元件來輕鬆實現這一功能。本文將為您介紹如何通過Java程式碼,以程式設計方式在Word中建立可填充表單。下面是我整理的步驟及方法,並附上Java程式碼供大家參考。
程式環境:
方法1:手動引入。將 Free Spire.Doc for Java 下載到本地,解壓,找到lib資料夾下的Spire.Doc.jar檔案。在IDEA中開啟如下介面,將本地路徑中的jar檔案引入Java程式
方法2: 如果您想通過 Maven安裝,則可以在 pom.xml 檔案中新增以下程式碼匯入 JAR 檔案。
<repositories> <repository> <id>com.e-iceblue</id> <url>https://repo.e-iceblue.cn/repository/maven-public/</url> </repository> </repositories> <dependencies> <dependency> <groupId>e-iceblue</groupId> <artifactId>spire.doc.free</artifactId> <version>5.2.0</version> </dependency> </dependencies>
使用者開啟下面的生成檔案,只能編輯表格中的表單,不能修改其他內容。詳細步驟如下:
Java
import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; import com.spire.doc.fields.TextRange; import java.util.Date; public class CreateFillableForm { public static void main(String[] args) { //建立檔案物件 Document doc = new Document(); //新增一個節 Section section = doc.addSection(); //新增一個表格 Table table = section.addTable(true); table.resetCells(7, 2); //將文字新增到第一列的單元格 Paragraph paragraph = table.getRows().get(0).getCells().get(0).addParagraph(); paragraph.appendText("純文字內容控制元件"); paragraph = table.getRows().get(1).getCells().get(0).addParagraph(); paragraph.appendText("富文字內容控制元件"); paragraph = table.getRows().get(2).getCells().get(0).addParagraph(); paragraph.appendText("圖片內容控制元件"); paragraph = table.getRows().get(3).getCells().get(0).addParagraph(); paragraph.appendText("下拉選單內容控制元件"); paragraph = table.getRows().get(4).getCells().get(0).addParagraph(); paragraph.appendText("核取方塊內容控制元件"); paragraph = table.getRows().get(5).getCells().get(0).addParagraph(); paragraph.appendText("下拉式方塊內容控制元件"); paragraph = table.getRows().get(6).getCells().get(0).addParagraph(); paragraph.appendText("日期選擇器內容控制元件"); //向單元格新增純文字內容控制元件 (0,1) paragraph = table.getRows().get(0).getCells().get(1).addParagraph(); StructureDocumentTagInline sdt = new StructureDocumentTagInline(doc); paragraph.getChildObjects().add(sdt); sdt.getSDTProperties().setSDTType(SdtType.Text); sdt.getSDTProperties().setAlias("純文字"); sdt.getSDTProperties().setTag("純文字"); sdt.getSDTProperties().isShowingPlaceHolder(true); SdtText text = new SdtText(true); text.isMultiline(false); sdt.getSDTProperties().setControlProperties(text); TextRange tr = new TextRange(doc); tr.setText("單擊或點選此處輸入文字。"); sdt.getSDTContent().getChildObjects().add(tr); //向單元格新增富文字內容控制元件 (1,1) paragraph = table.getRows().get(1).getCells().get(1).addParagraph(); sdt = new StructureDocumentTagInline(doc); paragraph.getChildObjects().add(sdt); sdt.getSDTProperties().setSDTType(SdtType.Rich_Text); sdt.getSDTProperties().setAlias("富文字"); sdt.getSDTProperties().setTag("富文字"); sdt.getSDTProperties().isShowingPlaceHolder(true); text = new SdtText(true); text.isMultiline(false); sdt.getSDTProperties().setControlProperties(text); tr = new TextRange(doc); tr.setText("單擊或點選此處輸入文字。"); sdt.getSDTContent().getChildObjects().add(tr); //向單元格新增圖片內容控制元件 (2,1) paragraph = table.getRows().get(2).getCells().get(1).addParagraph(); sdt = new StructureDocumentTagInline(doc); paragraph.getChildObjects().add(sdt); sdt.getSDTProperties().setSDTType(SdtType.Picture); sdt.getSDTProperties().setAlias("圖片"); sdt.getSDTProperties().setTag("圖片"); SdtPicture sdtPicture = new SdtPicture(); sdt.getSDTProperties().setControlProperties(sdtPicture); DocPicture pic = new DocPicture(doc); pic.loadImage("圖片2.jpg"); sdt.getSDTContent().getChildObjects().add(pic); //向單元格新增下拉選單內容控制元件(3,1) paragraph = table.getRows().get(3).getCells().get(1).addParagraph(); sdt = new StructureDocumentTagInline(doc); sdt.getSDTProperties().setSDTType(SdtType.Drop_Down_List); sdt.getSDTProperties().setAlias("下拉選單"); sdt.getSDTProperties().setTag("下拉選單"); paragraph.getChildObjects().add(sdt); SdtDropDownList sddl = new SdtDropDownList(); sddl.getListItems().add(new SdtListItem("選擇一個專案。", "1")); sddl.getListItems().add(new SdtListItem("專案2", "2")); sddl.getListItems().add(new SdtListItem("專案3", "3")); sddl.getListItems().add(new SdtListItem("專案4", "4")); sdt.getSDTProperties().setControlProperties(sddl); tr = new TextRange(doc); tr.setText(sddl.getListItems().get(0).getDisplayText()); sdt.getSDTContent().getChildObjects().add(tr); //向單元格新增兩個核取方塊內容控制元件 (4,1) paragraph = table.getRows().get(4).getCells().get(1).addParagraph(); sdt = new StructureDocumentTagInline(doc); paragraph.getChildObjects().add(sdt); sdt.getSDTProperties().setSDTType(SdtType.Check_Box); SdtCheckBox scb = new SdtCheckBox(); sdt.getSDTProperties().setControlProperties(scb); tr = new TextRange(doc); sdt.getChildObjects().add(tr); scb.setChecked(false); paragraph.appendText(" 選項 1"); paragraph = table.getRows().get(4).getCells().get(1).addParagraph(); sdt = new StructureDocumentTagInline(doc); paragraph.getChildObjects().add(sdt); sdt.getSDTProperties().setSDTType(SdtType.Check_Box); scb = new SdtCheckBox(); sdt.getSDTProperties().setControlProperties(scb); tr = new TextRange(doc); sdt.getChildObjects().add(tr); scb.setChecked(false); paragraph.appendText(" 選項 2"); //將下拉式方塊內容控制元件新增到單元格 (5,1) paragraph = table.getRows().get(5).getCells().get(1).addParagraph(); sdt = new StructureDocumentTagInline(doc); paragraph.getChildObjects().add(sdt); sdt.getSDTProperties().setSDTType(SdtType.Combo_Box); sdt.getSDTProperties().setAlias("下拉式方塊"); sdt.getSDTProperties().setTag("下拉式方塊"); SdtComboBox cb = new SdtComboBox(); cb.getListItems().add(new SdtListItem("選擇一個專案.")); cb.getListItems().add(new SdtListItem("專案 2")); cb.getListItems().add(new SdtListItem("專案 3")); sdt.getSDTProperties().setControlProperties(cb); tr = new TextRange(doc); tr.setText(cb.getListItems().get(0).getDisplayText()); sdt.getSDTContent().getChildObjects().add(tr); //將日期選擇器內容控制元件新增到單元格(6,1) paragraph = table.getRows().get(6).getCells().get(1).addParagraph(); sdt = new StructureDocumentTagInline(doc); paragraph.getChildObjects().add(sdt); sdt.getSDTProperties().setSDTType(SdtType.Date_Picker); sdt.getSDTProperties().setAlias("日期選擇器"); sdt.getSDTProperties().setTag("日期選擇器"); SdtDate date = new SdtDate(); date.setCalendarType(CalendarType.Default); date.setDateFormat("yyyy.MM.dd"); date.setFullDate(new Date()); sdt.getSDTProperties().setControlProperties(date); tr = new TextRange(doc); tr.setText("單擊或輕按以輸入日期。"); sdt.getSDTContent().getChildObjects().add(tr); //僅允許使用者編輯表單域 doc.protect(ProtectionType.Allow_Only_Form_Fields, "permission-psd"); //儲存結果檔案 doc.saveToFile("WordForm.docx", FileFormat.Docx_2013); } }
—本文完—