แทรกฟิลด์

มีหลายวิธีในการแทรกฟิลด์ลงในเอกสาร:

ในบทความนี้เราจะดูที่แต่ละวิธีในรายละเอียดมากขึ้นและวิเคราะห์วิธีการแทรกเขตข้อมูลบางอย่างโดยใช้ตัวเลือกเหล่านี้.

การใส่ฟิลด์ลงในเอกสารโดยใช้DocumentBuilder

ในAspose.WordsวิธีInsertFieldจะใช้ในการแทรกฟิลด์ใหม่ลงในเอกสาร พารามิเตอร์แรกยอมรับรหัสฟิลด์เต็มของฟิลด์ที่จะแทรก พารามิเตอร์ที่สองเป็นตัวเลือกและอนุญาตให้ฟิลด์ผลลัพธ์ของฟิลด์ที่จะตั้งค่าด้วยตนเอง อัพเดตโดยอัตโนมัติ คุณสามารถส่งผ่านโมฆะหรือว่างไปยังพารามิเตอร์นี้เพื่อแทรกฟิลด์ที่มีค่าฟิลด์ว่าง หากคุณไม่แน่ใจเกี่ยวกับไวยากรณ์รหัสฟิลด์เฉพาะ,สร้างฟิลด์ในMicrosoft Wordก่อนและสลับเพื่อดูรหัสฟิลด์.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการแทรกฟิลด์ผสานลงในเอกสารโดยใช้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");

เทคนิคเดียวกันจะใช้เพื่อแทรกฟิลด์ที่ซ้อนกันภายในฟิลด์อื่น.

ตัวอย่างรหัสต่อไปนี้สาธิตวิธีการแทรกฟิลด์ที่ซ้อนกันภายในฟิลด์อื่นโดยใช้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");

ระบุโลแคลที่ระดับฟิลด์

ตัวระบุภาษาเป็นตัวย่อตัวเลขสากลมาตรฐานสำหรับภาษาในประเทศหรือภูมิภาคทางภูมิศ ด้วยAspose.Wordsคุณสามารถระบุโลแคลที่ระดับฟิลด์โดยใช้คุณสมบัติLocaleIdซึ่งได้รับหรือตั้งค่าโลแคลของฟิลด์ID.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีใช้ตัวเลือกนี้:

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

แทรกเขตข้อมูลที่ไม่ได้พิมพ์/ว่างเปล่า

หากคุณต้องการแทรกฟิลด์ที่ไม่ได้พิมพ์/ว่างเปล่า({})เช่นเดียวกับMicrosoft Wordอนุญาต,คุณสามารถใช้วิธีการInsertFieldกับFieldType.FieldNoneพารามิเตอร์. เมื่อต้องการแทรกฟิลด์ลงในเอกสารคำคุณสามารถกดปุ่ม"ควบคุมการ+F9".

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการแทรกฟิลด์ว่างลงในเอกสาร:

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

แทรกฟิลด์COMPARE

ฟิลด์COMPAREเปรียบเทียบค่าสองค่าและส่งคืนค่าตัวเลข 1 ถ้าการเปรียบเทียบเป็นจริงหรือ 0 ถ้าการเปรียบเทียบเป็นเท็จ.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีเพิ่มฟิลด์COMPAREโดยใช้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");

แทรกฟิลด์IF

ฟิลด์IFสามารถใช้เพื่อประเมินอาร์กิวเมนต์ตามเงื่อนไข.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีเพิ่มฟิลด์IFโดยใช้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");

การใส่ฟิลด์ลงในเอกสารโดยใช้FieldBuilder

ทางเลือกในการแทรกฟิลด์ในAspose.WordsคือFieldBuilderคลาส จะมีอินเตอร์เฟซที่คล่องแคล่วในการระบุสวิทช์ฟิลด์และค่าอาร์กิวเมนต์เป็นข้อความโหนดห.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการแทรกฟิลด์ลงในเอกสารโดยใช้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");

การใส่ฟิลด์โดยใช้DOM

นอกจากนี้คุณยังสามารถแทรกประเภทต่างๆของเขตข้อมูลโดยใช้ Aspose.Wordsรูปแบบวัตถุเอกสาร(DOM). ในส่วนนี้เราจะดูตัวอย่างบางส่วน.

การแทรกฟิลด์ผสานลงในเอกสารโดยใช้DOM

MERGEFIELD field in Word document can be represented by the FieldMergeField class. You can use FieldMergeField class to perform the following operations:

  • ระบุชื่อของฟิลด์ผสาน
  • ระบุการจัดรูปแบบของฟิลด์ผสาน
  • ระบุข้อความที่อยู่ระหว่างตัวคั่นฟิลด์และฟิลด์สิ้นสุดของฟิลด์ผสาน
  • ระบุข้อความที่จะแทรกหลังจากฟิลด์ผสานถ้าฟิลด์ไม่ว่างเปล่า
  • ระบุข้อความที่จะแทรกก่อนฟิลด์ผสานถ้าฟิลด์ไม่ว่าง

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการเพิ่มฟิลด์MERGEโดยใช้DOMไปยังย่อหน้าในเอกสาร:

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

การแทรกฟิลด์Mail MergeADDRESSBLOCKลงในเอกสารโดยใช้DOM

ฟิลด์ADDRESSBLOCKถูกใช้เพื่อแทรกบล็อกที่อยู่Mail Mergeในเอกสารคำ ADDRESSBLOCKฟิลด์ในเอกสารคำสามารถแสดงโดยFieldAddressBlockชั้น คุณสามารถใช้FieldAddressBlockคลาสในการดำเนินการดังต่อไปนี้:

  • ระบุว่าจะใส่ชื่อของประเทศ/ภูมิภาคในฟิลด์หรือไม่
  • ระบุว่าจะจัดรูปแบบที่อยู่ตามประเทศ/ภูมิภาคของผู้รับตามที่กำหนดโดยPOST*CODE(สหภาพไปรษณีย์สากล 2006)
  • ระบุชื่อประเทศ/ภูมิภาคที่ยกเว้น
  • ระบุชื่อและรูปแบบที่อยู่
  • ระบุภาษาIDที่ใช้ในการจัดรูปแบบที่อยู่

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการเพิ่มฟิลด์Mail MergeADDRESSBLOCKโดยใช้DOMไปยังย่อหน้าในเอกสาร:

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

การแทรกฟิลด์ADVANCEลงในเอกสารโดยไม่ใช้DocumentBuilder

ฟิลด์ADVANCEใช้เพื่อชดเชยข้อความที่ตามมาภายในบรรทัดไปทางซ้ายขวาขึ้นหรือลง ADVANCEฟิลด์ในเอกสารคำสามารถแสดงโดยFieldAdvanceชั้น คุณสามารถใช้ชั้นเรียนFieldAdvanceเพื่อดำเนินการดังต่อไปนี้:

  • ระบุจำนวนจุดที่ควรย้ายข้อความตามฟิลด์ในแนวตั้งจากขอบด้านบนของหน้า
  • ระบุจำนวนจุดที่ควรย้ายข้อความตามฟิลด์ในแนวนอนจากขอบด้านซ้ายของคอลัมน์เฟรมหรื
  • ระบุจำนวนจุดที่ข้อความตามฟิลด์ควรย้ายไปทางซ้ายขวาขึ้นหรือลง

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการเพิ่มฟิลด์ADVANCEโดยใช้DOMไปยังย่อหน้าในเอกสาร:

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

การแทรกฟิลด์ASKลงในเอกสารโดยไม่ใช้DocumentBuilder

ฟิลด์ASKถูกใช้เพื่อแจ้งให้ผู้ใช้สามารถกำหนดข้อความไปยังที่คั่นหน้าในเอกสารคำ ASKฟิลด์ในเอกสารคำสามารถแสดงโดยFieldAskชั้น คุณสามารถใช้ชั้นเรียนFieldAskเพื่อดำเนินการดังต่อไปนี้:

  • ระบุชื่อของบุ๊กมาร์ก
  • ระบุการตอบสนองของผู้ใช้ดีฟอลต์(ค่าเริ่มต้นที่มีอยู่ในหน้าต่างพร้อมท์)
  • ระบุว่าควรได้รับคำตอบของผู้ใช้หนึ่งครั้งต่อการดำเนินการMail Merge
  • ระบุข้อความพร้อมท์(ชื่อของหน้าต่างพร้อมท์)

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการเพิ่มฟิลด์ASKโดยใช้DOMไปยังย่อหน้าในเอกสาร:

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

การแทรกฟิลด์AUTHORลงในเอกสารโดยไม่ใช้DocumentBuilder

ฟิลด์AUTHORใช้เพื่อระบุชื่อของผู้เขียนของเอกสารจากคุณสมบัติDocument AUTHORฟิลด์ในเอกสารคำสามารถแสดงโดยFieldAuthorชั้น คุณสามารถใช้ชั้นเรียนFieldAuthorเพื่อดำเนินการดังต่อไปนี้:

  • ระบุชื่อผู้เขียนเอกสาร

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการเพิ่มฟิลด์AUTHORโดยใช้DOMไปยังย่อหน้าในเอกสาร:

// 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 AUTHOR field like this:
// { AUTHOR Test1 }
FieldAuthor field = (FieldAuthor) para.appendField(FieldType.FIELD_AUTHOR, false);
field.setAuthorName("Test1"); // { AUTHOR Test1 }
field.update();
doc.save(getArtifactsDir() + "WorkingWithFields.InsertAuthorField.docx");

การแทรกฟิลด์INCLUDETEXTลงในเอกสารโดยไม่ใช้DocumentBuilder

ฟิลด์INCLUDETEXTแทรกข้อความและกราฟิกที่มีอยู่ในเอกสารที่มีชื่อในรหัสฟิลด์ คุณสามารถแทรกเอกสารทั้งหมดหรือบางส่วนของเอกสารที่อ้างถึงโดยบุ๊กมาร์ก ฟิลด์นี้ในเอกสารคำแสดงด้วยINCLUDETEXT คุณสามารถใช้ชั้นเรียนFieldIncludeTextเพื่อดำเนินการดังต่อไปนี้:

  • ระบุชื่อของบุ๊กมาร์กของเอกสารที่รวมอยู่
  • ระบุตำแหน่งของเอกสาร

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการเพิ่มฟิลด์INCLUDETEXTโดยใช้DOMไปยังย่อหน้าในเอกสาร:

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

การแทรกฟิลด์TOAลงในเอกสารโดยไม่ใช้DocumentBuilder

ฟิลด์TOA(Table of Authorities)สร้างและแทรกตารางของเจ้าหน้าที่ ฟิลด์TOAรวบรวมรายการที่ทำเครื่องหมายด้วยฟิลด์TA(Table of Authorities Entry) Microsoftคำสำนักงานแทรกฟิลด์TOAเมื่อคุณคลิกInsert Table of Authoritiesในกลุ่มTable of Authoritiesบนแท็บReferences เมื่อคุณดูฟิลด์TOAในเอกสารของคุณไวยากรณ์มีลักษณะเช่นนี้:

{ TOA [Switches ] }

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการเพิ่มฟิลด์TOAโดยใช้DOMไปยังย่อหน้าในเอกสาร.

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