Вмъкване на полета

Има няколко различни начина за вмъкване на полета в документ:

В тази статия ще разгледаме по-подробно всеки начин и ще анализираме как да вмъкнем определени полета, използвайки тези опции.

Вмъкване на полета в документ с помощта на Document Builder

В 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, Можете да посочите Locale на нивото на полето с помощта на LocaleId имот, който получава или определя местоположението на полето.

Следният пример за код показва как да използвате тази опция:

// 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 параметър. За да вмъкнете поле в Word документ, можете да натиснете Ctrl + 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, ако сравнението е true или 0, ако сравнението е false.

Следният пример с код показва как да добавите 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 Document Object Model (DOM). В този раздел ще разгледаме няколко примера.

Вмъкване на сливане Поле в документ, използващ DOM

MERGEFIELD полето в документа на Word може да бъде представено от FieldMergeField Клас. Можеш да използваш FieldMergeField клас за извършване на следните операции:

  • посочете името на полето за сливане
  • посочете форматирането на полето за сливане
  • посочете текста, който е между разделителя на полето и края на полето на сливането
  • посочете текста, който трябва да се вмъкне след сливането, ако полето не е празно
  • посочете текста, който ще бъде поставен преди сливането на полето, ако полето не е празно

Следният пример с код показва как да добавите 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 Merge ADDRESSBLOCK поле в документ, използващ DOM

На ADDRESSBLOCK поле се използва за вмъкване на Mail Merge адрес блок в Word документ. ADDRESSBLOCK полето в документа на Word може да бъде представено от FieldAddressBlock Клас. Можеш да използваш FieldAddressBlock клас за извършване на следните операции:

  • посочете дали да включите името на страната/региона в полето
  • да се уточни дали да се форматира адресът според държавата/региона на получателя, както е определен от POST*CODE (Универсален пощенски съюз 2006)
  • посочете името на страната/региона
  • посочете името и формата на адреса
  • посочете езика ID, използван за форматиране на адреса

Следният пример с код показва как да добавите Mail Merge ADDRESSBLOCK Използване на поле 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 полето в документа на Word може да бъде представено от 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 полето се използва за подканване на потребителя за текст за присвояване на отметка в Word документ. ASK полето в документа на Word може да бъде представено от FieldAsk Клас. Можеш да използваш FieldAsk клас за извършване на следните операции:

  • посочете името на отметките
  • посочете отговора на потребителя по подразбиране (първоначална стойност, съдържаща се в бързия прозорец)
  • посочете дали потребителският отговор трябва да се получи веднъж на a 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 полето в документа на Word може да бъде представено от 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 полето вмъква текста и графиките, съдържащи се в документа, посочен в кода на полето. Можете да поставите целия документ или част от документа, посочен с отметки. Тази област в Word документ е представена от ВКЛЮЧИТЕЛНО ЕТЕКСТ. Можеш да използваш 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 (Таблица на органите) полето изгражда и вмъква таблица от органи. На TOA поле събира записи, маркирани с TA (Таблица на органите за влизане) полета. Microsoft Office Word вмъква TOA поле, когато кликнете * Таблица на органите група на 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");