Sisipkan Bidang
Ada beberapa cara berbeda untuk menyisipkan bidang ke dalam dokumen:
- menggunakan DocumentBuilder
- menggunakan FieldBuilder
- menggunakan Aspose.Words Model Objek Dokumen (DOM)
Pada artikel ini, kita akan melihat setiap cara secara lebih rinci dan menganalisis cara menyisipkan bidang tertentu menggunakan opsi ini.
Menyisipkan Bidang ke dalam Dokumen menggunakan DocumentBuilder
Dalam Aspose.Words metode InsertField digunakan untuk menyisipkan bidang baru ke dalam dokumen. Parameter pertama menerima kode bidang lengkap dari bidang yang akan disisipkan. Parameter kedua bersifat opsional dan memungkinkan hasil bidang bidang diatur secara manual. Jika ini tidak disediakan maka bidang diperbarui secara otomatis. Anda dapat meneruskan null atau empty ke parameter ini untuk menyisipkan bidang dengan nilai bidang kosong. Jika Anda tidak yakin tentang sintaks kode bidang tertentu, buat bidang dalam Microsoft Word terlebih dahulu dan alihkan untuk melihat kode bidangnya.
Contoh kode berikut menunjukkan cara menyisipkan bidang gabungan ke dalam dokumen menggunakan DocumentBuilder:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getDataDir(InsertField.class); | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.insertField("MERGEFIELD MyFieldName \\* MERGEFORMAT"); | |
doc.save(dataDir + "output.docx"); |
Teknik yang sama digunakan untuk menyisipkan bidang yang bersarang di dalam bidang lain.
Contoh kode berikut menunjukkan cara menyisipkan bidang yang bersarang di dalam bidang lain menggunakan DocumentBuilder:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
for (int i = 0; i < 5; i++) | |
builder.insertBreak(BreakType.PAGE_BREAK); | |
builder.moveToHeaderFooter(HeaderFooterType.FOOTER_PRIMARY); | |
// We want to insert a field like this: | |
// { IF {PAGE} <> {NUMPAGES} "See Next Page" "Last Page" } | |
Field field = builder.insertField("IF "); | |
builder.moveTo(field.getSeparator()); | |
builder.insertField("PAGE"); | |
builder.write(" <> "); | |
builder.insertField("NUMPAGES"); | |
builder.write(" \"See Next Page\" \"Last Page\" "); | |
field.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertNestedFields.docx"); |
Tentukan Lokal di Tingkat Bidang
Pengenal bahasa adalah singkatan angka internasional standar untuk bahasa di suatu negara atau wilayah geografis. Dengan Aspose.Words, Anda dapat menentukan Lokal di tingkat bidang menggunakan properti LocaleId, yang mendapatkan atau menyetel lokal bidang ID.
Contoh kode berikut menunjukkan cara menggunakan opsi ini:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
DocumentBuilder builder = new DocumentBuilder(); | |
Field field = builder.insertField(FieldType.FIELD_DATE, true); | |
field.setLocaleId(1049); | |
builder.getDocument().save(getArtifactsDir() + "WorkingWithFields.SpecifylocaleAtFieldlevel.docx"); |
Sisipkan Bidang yang Tidak Diketik / Kosong
Jika Anda ingin menyisipkan bidang yang tidak diketik / kosong ({}) seperti yang diizinkan oleh Microsoft Word, Anda dapat menggunakan metode InsertField dengan parameter FieldType.FieldNone. Untuk menyisipkan bidang ke dalam dokumen Word, Anda dapat menekan kombinasi tombol “Ctrl + F9”.
Contoh kode berikut menunjukkan cara menyisipkan bidang kosong ke dalam dokumen:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
FieldUnknown field = (FieldUnknown) builder.insertField(FieldType.FIELD_NONE, false); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertFieldNone.docx"); |
Sisipkan Bidang COMPARE
Bidang COMPARE
membandingkan dua nilai dan mengembalikan nilai numerik 1 jika perbandingannya benar atau 0 jika perbandingannya salah.
Contoh kode berikut menunjukkan cara menambahkan kolom COMPARE
menggunakan DocumentBuilder:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
FieldCompare field = (FieldCompare) builder.insertField(FieldType.FIELD_COMPARE, true); | |
field.setLeftExpression("3"); | |
field.setComparisonOperator("<"); | |
field.setRightExpression("2"); | |
field.update(); | |
builder.writeln(); | |
field = (FieldCompare) builder.insertField(FieldType.FIELD_COMPARE, true); | |
field.setLeftExpression("5"); | |
field.setComparisonOperator("="); | |
field.setRightExpression("2 + 3"); | |
field.update(); | |
doc.updateFields(); | |
doc.save(getArtifactsDir() + "Field.COMPARE.docx"); |
Sisipkan Bidang IF
Bidang IF
dapat digunakan untuk mengevaluasi argumen secara kondisional.
Contoh kode berikut menunjukkan cara menambahkan kolom IF
menggunakan DocumentBuilder:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.write("Statement 1: "); | |
FieldIf field = (FieldIf) builder.insertField(FieldType.FIELD_IF, true); | |
field.setLeftExpression("0"); | |
field.setComparisonOperator("="); | |
field.setRightExpression("1"); | |
// The IF field will display a string from either its "TrueText" property, | |
// or its "FalseText" property, depending on the truth of the statement that we have constructed. | |
field.setTrueText("True"); | |
field.setFalseText("False"); | |
field.update(); | |
builder.write("\nStatement 2: "); | |
field = (FieldIf) builder.insertField(FieldType.FIELD_IF, true); | |
field.setLeftExpression("5"); | |
field.setComparisonOperator("="); | |
field.setRightExpression("2 + 3"); | |
field.setTrueText("True"); | |
field.setFalseText("False"); | |
field.update(); | |
doc.updateFields(); | |
doc.save(getArtifactsDir() + "Field.IF.docx"); |
Menyisipkan Bidang ke dalam Dokumen menggunakan FieldBuilder
Cara alternatif untuk menyisipkan bidang dalam Aspose.Words adalah kelas FieldBuilder. Ini menyediakan antarmuka yang lancar untuk menentukan sakelar bidang dan nilai argumen sebagai teks, simpul, atau bahkan bidang bersarang.
Contoh kode berikut menunjukkan cara menyisipkan bidang ke dalam dokumen menggunakan FieldBuilder:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
FieldBuilder firstName = new FieldBuilder(FieldType.FIELD_MERGE_FIELD); | |
firstName.addArgument("firstname"); | |
FieldBuilder lastName = new FieldBuilder(FieldType.FIELD_MERGE_FIELD); | |
lastName.addArgument("lastname"); | |
FieldArgumentBuilder firstnameArgumentBuilder = new FieldArgumentBuilder(); | |
firstnameArgumentBuilder.addText("Firstname: "); | |
firstnameArgumentBuilder.addField(firstName); | |
FieldArgumentBuilder lastnameArgumentBuilder = new FieldArgumentBuilder(); | |
lastnameArgumentBuilder.addText("Lastname: "); | |
lastnameArgumentBuilder.addField(lastName); | |
// Prepare IF field with two nested MERGEFIELD fields: { IF "left expression" = "right expression" "Firstname: { MERGEFIELD firstname }" "Lastname: { MERGEFIELD lastname }"} | |
FieldBuilder fieldBuilder = new FieldBuilder(FieldType.FIELD_IF); | |
fieldBuilder.addArgument("left expression"); | |
fieldBuilder.addArgument("="); | |
fieldBuilder.addArgument("right expression"); | |
fieldBuilder.addArgument(firstnameArgumentBuilder); | |
fieldBuilder.addArgument(lastnameArgumentBuilder); | |
// Insert IF field in exact location | |
Field field = fieldBuilder.buildAndInsert(doc.getFirstSection().getBody().getFirstParagraph()); | |
field.update(); | |
doc.save(getArtifactsDir() + "Field.InsertFieldUsingFieldBuilder.docx"); |
Menyisipkan Kolom menggunakan DOM
Anda juga dapat menyisipkan berbagai jenis bidang menggunakan Aspose.Words Model Objek Dokumen (DOM). Pada bagian ini, kita akan melihat beberapa contoh.
Menyisipkan Bidang Gabungan ke dalam Dokumen menggunakan DOM
MERGEFIELD
field in Word document can be represented by the FieldMergeField class. You can use FieldMergeField class to perform the following operations:
- tentukan nama bidang penggabungan
- tentukan pemformatan bidang penggabungan
- tentukan teks yang berada di antara pemisah bidang dan akhir bidang dari bidang gabungan
- tentukan teks yang akan disisipkan setelah bidang gabungan jika bidang tidak kosong
- tentukan teks yang akan disisipkan sebelum bidang gabungan jika bidang tidak kosong
Contoh kode berikut menunjukkan cara menambahkan bidang MERGE
menggunakan DOM ke paragraf dalam dokumen:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Paragraph para = (Paragraph) doc.getChildNodes(NodeType.PARAGRAPH, true).get(0); | |
builder.moveTo(para); | |
// We want to insert a merge field like this: | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" } | |
FieldMergeField field = (FieldMergeField) builder.insertField(FieldType.FIELD_MERGE_FIELD, false); | |
// { " MERGEFIELD Test1" } | |
field.setFieldName("Test1"); | |
// { " MERGEFIELD Test1 \\b Test2" } | |
field.setTextBefore("Test2"); | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 } | |
field.setTextAfter("Test3"); | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m" } | |
field.isMapped(true); | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" } | |
field.isVerticalFormatting(true); | |
field.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertMergeFieldUsingDOM.docx"); |
Menyisipkan bidang Mail Merge ADDRESSBLOCK
ke dalam Dokumen menggunakan DOM
Bidang ADDRESSBLOCK
digunakan untuk menyisipkan blok alamat Mail Merge dalam dokumen Word. bidang ADDRESSBLOCK
dalam dokumen Word dapat diwakili oleh kelas FieldAddressBlock. Anda dapat menggunakan kelas FieldAddressBlock untuk melakukan operasi berikut:
- tentukan apakah akan mencantumkan nama negara / wilayah di bidang tersebut
- tentukan apakah akan memformat alamat sesuai dengan negara / wilayah penerima seperti yang didefinisikan oleh POST*CODE (Universal Postal Union 2006)
- sebutkan nama negara/wilayah yang dikecualikan
- tentukan nama dan format alamat
- tentukan bahasa ID yang digunakan untuk memformat alamat
Contoh kode berikut menunjukkan cara menambahkan Bidang Mail Merge ADDRESSBLOCK
menggunakan DOM ke paragraf dalam dokumen:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Paragraph para = (Paragraph) doc.getChildNodes(NodeType.PARAGRAPH, true).get(0); | |
builder.moveTo(para); | |
// We want to insert a mail merge address block like this: | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" } | |
FieldAddressBlock field = (FieldAddressBlock) builder.insertField(FieldType.FIELD_ADDRESS_BLOCK, false); | |
// { ADDRESSBLOCK \\c 1" } | |
field.setIncludeCountryOrRegionName("1"); | |
// { ADDRESSBLOCK \\c 1 \\d" } | |
field.setFormatAddressOnCountryOrRegion(true); | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 } | |
field.setExcludedCountryOrRegionName("Test2"); | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 } | |
field.setNameAndAddressFormat("Test3"); | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" } | |
field.setLanguageId("Test 4"); | |
field.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertMailMergeAddressBlockFieldUsingDOM.docx"); |
Menyisipkan bidang ADVANCE
ke dalam Dokumen tanpa menggunakan DocumentBuilder
Bidang ADVANCE
digunakan untuk mengimbangi teks berikutnya dalam satu baris ke kiri, kanan, atas, atau bawah. bidang ADVANCE
dalam dokumen Word dapat diwakili oleh kelas FieldAdvance. Anda dapat menggunakan kelas FieldAdvance untuk melakukan operasi berikut:
- tentukan jumlah titik di mana teks yang mengikuti bidang harus dipindahkan secara vertikal dari tepi atas halaman
- tentukan jumlah titik di mana teks yang mengikuti bidang harus dipindahkan secara horizontal dari tepi kiri kolom, bingkai, atau kotak teks
- tentukan jumlah titik di mana teks yang mengikuti bidang harus dipindahkan ke kiri, kanan, atas atau bawah
Contoh kode berikut menunjukkan cara menambahkan Bidang ADVANCE
menggunakan DOM ke paragraf dalam dokumen:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
Paragraph para = (Paragraph) doc.getChildNodes(NodeType.PARAGRAPH, true).get(0); | |
// We want to insert an Advance field like this: | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 } | |
FieldAdvance field = (FieldAdvance) para.appendField(FieldType.FIELD_ADVANCE, false); | |
// { ADVANCE \\d 10 " } | |
field.setDownOffset("10"); | |
// { ADVANCE \\d 10 \\l 10 } | |
field.setLeftOffset("10"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 } | |
field.setRightOffset("-3.3"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 } | |
field.setUpOffset("0"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 } | |
field.setHorizontalPosition("100"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 } | |
field.setVerticalPosition("100"); | |
field.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertAdvanceFieldWithOutDocumentBuilder.docx"); |
Menyisipkan bidang ASK
ke dalam Dokumen tanpa menggunakan DocumentBuilder
Bidang ASK
digunakan untuk meminta teks kepada pengguna untuk ditetapkan ke Bookmark dalam dokumen Word. bidang ASK
dalam dokumen Word dapat diwakili oleh kelas FieldAsk. Anda dapat menggunakan kelas FieldAsk untuk melakukan operasi berikut:
- tentukan nama bookmark
- tentukan respons pengguna default (nilai awal yang terdapat di jendela prompt)
- tentukan apakah respons pengguna harus diterima satu kali per operasi Mail Merge
- tentukan teks prompt (judul jendela prompt)
Contoh kode berikut menunjukkan cara menambahkan Bidang ASK
menggunakan DOM ke paragraf dalam dokumen:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
Paragraph para = (Paragraph) doc.getChildNodes(NodeType.PARAGRAPH, true).get(0); | |
// We want to insert an Ask field like this: | |
// { ASK \"Test 1\" Test2 \\d Test3 \\o } | |
FieldAsk field = (FieldAsk) para.appendField(FieldType.FIELD_ASK, false); | |
// { ASK \"Test 1\" " } | |
field.setBookmarkName("Test 1"); | |
// { ASK \"Test 1\" Test2 } | |
field.setPromptText("Test2"); | |
// { ASK \"Test 1\" Test2 \\d Test3 } | |
field.setDefaultResponse("Test3"); | |
// { ASK \"Test 1\" Test2 \\d Test3 \\o } | |
field.setPromptOnceOnMailMerge(true); | |
field.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertASKFieldWithOutDocumentBuilder.docx"); |
Menyisipkan bidang AUTHOR
ke dalam Dokumen tanpa menggunakan DocumentBuilder
Bidang AUTHOR
digunakan untuk menentukan nama pembuat dokumen dari properti Document
. bidang AUTHOR
dalam dokumen Word dapat diwakili oleh kelas FieldAuthor. Anda dapat menggunakan kelas FieldAuthor untuk melakukan operasi berikut:
- tentukan nama pembuat dokumen
Contoh kode berikut menunjukkan cara menambahkan Bidang AUTHOR
menggunakan DOM ke paragraf dalam dokumen:
Menyisipkan bidang INCLUDETEXT
ke dalam Dokumen tanpa menggunakan DocumentBuilder
Bidang INCLUDETEXT
menyisipkan teks dan grafik yang terdapat dalam dokumen yang disebutkan dalam kode bidang. Anda dapat menyisipkan seluruh dokumen atau sebagian dokumen yang dirujuk oleh penanda. Bidang ini dalam dokumen Word diwakili oleh INCLUDETEXT. Anda dapat menggunakan kelas FieldIncludeText untuk melakukan operasi berikut:
- tentukan nama bookmark dari dokumen yang disertakan
- tentukan lokasi dokumen
Contoh kode berikut menunjukkan cara menambahkan bidang INCLUDETEXT
menggunakan DOM ke paragraf dalam dokumen:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
Paragraph para = new Paragraph(doc); | |
// We want to insert an INCLUDETEXT field like this: | |
// { INCLUDETEXT "file path" } | |
FieldIncludeText fieldIncludeText = (FieldIncludeText) para.appendField(FieldType.FIELD_INCLUDE_TEXT, false); | |
fieldIncludeText.setBookmarkName("bookmark"); | |
fieldIncludeText.setSourceFullName(getMyDir() + "IncludeText.docx"); | |
doc.getFirstSection().getBody().appendChild(para); | |
fieldIncludeText.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertIncludeFieldWithoutDocumentBuilder.docx"); |
Menyisipkan bidang TOA
ke dalam Dokumen tanpa menggunakan DocumentBuilder
Bidang TOA
(Table of Authorities) membuat dan menyisipkan tabel otoritas. Bidang TOA
mengumpulkan entri yang ditandai dengan bidang TA
(Table of Authorities Entry). Microsoft Office Word menyisipkan bidang TOA
saat Anda mengeklik Insert Table of Authorities di grup Table of Authorities pada tab References. Saat Anda melihat bidang TOA
di dokumen Anda, sintaksnya terlihat seperti ini:
{ TOA
[Switches ] }
Contoh kode berikut menunjukkan cara menambahkan bidang TOA
menggunakan DOM ke paragraf dalam dokumen.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
Paragraph para = new Paragraph(doc); | |
// We want to insert TA and TOA fields like this: | |
// { TA \c 1 \l "Value 0" } | |
// { TOA \c 1 } | |
FieldTA fieldTA = (FieldTA) para.appendField(FieldType.FIELD_TOA_ENTRY, false); | |
fieldTA.setEntryCategory("1"); | |
fieldTA.setLongCitation("Value 0"); | |
doc.getFirstSection().getBody().appendChild(para); | |
para = new Paragraph(doc); | |
FieldToa fieldToa = (FieldToa) para.appendField(FieldType.FIELD_TOA, false); | |
fieldToa.setEntryCategory("1"); | |
doc.getFirstSection().getBody().appendChild(para); | |
fieldToa.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertTOAFieldWithoutDocumentBuilder.docx"); |