Wstaw pola

Istnieje kilka różnych sposobów umieszczania pól w dokumencie:

W tym artykule, będziemy patrzeć na każdy sposób bardziej szczegółowo i przeanalizować, jak umieścić pewne pola przy użyciu tych opcji.

Wstawianie pól do dokumentu przy użyciu DocumentBuilder

W Aspose.Words do InsertField metoda jest używana do wprowadzania nowych pól do dokumentu. Pierwszy parametr akceptuje pełny kod pola, które ma zostać wstawione. Drugi parametr jest opcjonalny i pozwala na ręczne ustawienie wyniku pola. Jeśli to nie jest dostarczone, pole jest automatycznie aktualizowane. Możesz podać null lub pustym do tego parametru, aby umieścić pole o pustej wartości pola. Jeśli nie jesteś pewien konkretnej składni kodu pola, stwórz pole w Microsoft Word pierwszy i przełącz, aby zobaczyć jego kod pola.

Poniższy przykład kodu pokazuje jak wstawić pole scalania do dokumentu używając 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");

Tę samą technikę stosuje się do umieszczania pól zagnieżdżonych w innych polach.

Poniższy przykład kodu pokazuje jak wstawić pola zagnieżdżone w innym polu używając 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");

Określić położenie na poziomie pola

Identyfikator języka jest standardowym międzynarodowym skrótem numerycznym dla danego języka w kraju lub regionie geograficznym. Z Aspose.Words, możesz określić Locale na poziomie pola za pomocą LocaleId nieruchomość, która pobiera lub ustawia identyfikator lokalizacji pola.

Poniższy przykład kodu pokazuje jak korzystać z tej opcji:

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

Wstaw niewpisane / puste pole

Jeśli chcesz wstawić niewpisane / puste pola ({}) just like Microsoft Word pozwala, można użyć InsertField metoda z FieldType.FieldNone parametr. Aby umieścić pole w dokumencie Word, można nacisnąć kombinację klawiszy Ctrl + F9.

Poniższy przykład kodu pokazuje jak umieścić puste pole w dokumencie:

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

Wstaw COMPARE Pole

W COMPARE pole porównuje dwie wartości i zwraca wartość liczbową 1, jeśli porównanie jest true lub 0, jeśli porównanie jest false.

Poniższy przykład kodu pokazuje jak dodać COMPARE pola używające 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");

Wstaw IF Pole

W IF pole może być użyte do oceny argumentów warunkowo.

Poniższy przykład kodu pokazuje jak dodać IF pola używające 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");

Wstawianie pól do dokumentu przy użyciu FieldBuilder

Alternatywny sposób umieszczania pól w Aspose.Words jest FieldBuilder Klasa. Zapewnia płynny interfejs do określenia przełączników pola i wartości argumentów jako tekst, węzły lub nawet zagnieżdżone pola.

Poniższy przykład kodu pokazuje jak wstawić pole do dokumentu używając 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");

Wstawianie pól DOM

Można również wprowadzić różne rodzaje pól za pomocą Aspose.Words Document Object Model (DOM). W tej części przyjrzymy się kilku przykładom.

Wstawianie połączenia Pole w dokumencie DOM

MERGEFIELD pole w dokumencie Word może być reprezentowane przez FieldMergeField Klasa. Możesz użyć FieldMergeField klasa do wykonywania następujących operacji:

  • podać nazwę pola połączenia
  • określić formatowanie pola połączenia
  • określić tekst, który znajduje się pomiędzy separatorem pola a końcem pola pola połączenia
  • określić tekst, który ma być wstawiony po polu scalania, jeśli pole nie jest puste
  • określić tekst, który ma być wstawiony przed polem połączenia, jeśli pole nie jest puste

Poniższy przykład kodu pokazuje jak dodać MERGE użycie pola DOM do ustępu w dokumencie:

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

Wprowadzanie Mail Merge ADDRESSBLOCK pole w dokumencie DOM

W ADDRESSBLOCK pole jest używane do wprowadzenia Mail Merge blok adresu w dokumencie Word. ADDRESSBLOCK pole w dokumencie Word może być reprezentowane przez FieldAddressBlock Klasa. Możesz użyć FieldAddressBlock klasa do wykonywania następujących operacji:

  • określić, czy włączyć nazwę kraju / regionu do pola
  • określić, czy należy formatować adres w zależności od kraju / regionu odbiorcy w rozumieniu POST * CODE (Universal Postal Union 2006)
  • podać wyłączoną nazwę kraju / regionu
  • określić format nazwy i adresu
  • określić identyfikator języka używany do formatowania adresu

Poniższy przykład kodu pokazuje jak dodać Mail Merge ADDRESSBLOCK Pole DOM do ustępu w dokumencie:

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

Wprowadzanie ADVANCE pole do dokumentu bez korzystania z DocumentBuilder

W ADVANCE pole jest używane do przesunięcia kolejnego tekstu w linii w lewo, prawo, w górę lub w dół. ADVANCE pole w dokumencie Word może być reprezentowane przez FieldAdvance Klasa. Można użyć FieldAdvance klasa do wykonywania następujących operacji:

  • określić liczbę punktów, za pomocą których tekst po polu powinien być przesunięty pionowo od górnej krawędzi strony
  • określić liczbę punktów, za pomocą których tekst po polu powinien być przesunięty poziomo od lewej krawędzi kolumny, ramki lub pola tekstowego
  • określić liczbę punktów, w których tekst po polu powinien być przesunięty w lewo, w prawo, w górę lub w dół

Poniższy przykład kodu pokazuje jak dodać ADVANCE Pole DOM do ustępu w dokumencie:

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

Wprowadzanie ASK pole do dokumentu bez korzystania z DocumentBuilder

W ASK pole służy do wywołania przez użytkownika tekstu przypisania do zakładki w dokumencie Word. ASK pole w dokumencie Word może być reprezentowane przez FieldAsk Klasa. Możesz użyć FieldAsk klasa do wykonywania następujących operacji:

  • podać nazwę zakładki
  • określenie domyślnej odpowiedzi użytkownika (wartość początkowa zawarta w oknie “prompt”)
  • określić, czy odpowiedź użytkownika powinna być odbierana raz na Mail Merge działanie
  • określić tekst (tytuł okna)

Poniższy przykład kodu pokazuje jak dodać ASK Pole DOM do ustępu w dokumencie:

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

Wprowadzanie AUTHOR pole do dokumentu bez korzystania z DocumentBuilder

W AUTHOR pole służy do określenia nazwy autora dokumentu z Document nieruchomości. AUTHOR pole w dokumencie Word może być reprezentowane przez FieldAuthor Klasa. Możesz użyć FieldAuthor klasa do wykonywania następujących operacji:

  • podać nazwę autora dokumentu

Poniższy przykład kodu pokazuje jak dodać AUTHOR Pole DOM do ustępu w dokumencie:

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

Wprowadzanie INCLUDETEXT pole do dokumentu bez korzystania z DocumentBuilder

W INCLUDETEXT pole wprowadza tekst i grafikę zawarte w dokumencie określonym w kodzie pola. Można wstawić cały dokument lub część dokumentu, o którym mowa w zakładce. To pole w dokumencie Word jest reprezentowane przez INCLUDETEXT. Możesz użyć FieldIncludeText klasa do wykonywania następujących operacji:

  • podać nazwę dołączonego dokumentu zakładki
  • określić lokalizację dokumentu

Poniższy przykład kodu pokazuje jak dodać INCLUDETEXT użycie pola DOM do ustępu w dokumencie:

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

Wprowadzanie TOA pole do dokumentu bez korzystania z DocumentBuilder

W TOA (* Tabela organów *) pole buduje i umieszcza tabelę organów. W TOA pole zbiera wpisy oznaczone przez TA (* Tabela wpisów organów *). Microsoft Office Word wprowadza TOA pole po kliknięciu * Wstaw tabelę organów * w **Tabela organów** Grupa **References** Tab. Kiedy oglądasz TOA pole w dokumencie, składnia wygląda tak:

{ TOA [Switches ] }

Poniższy przykład kodu pokazuje jak dodać TOA użycie pola DOM do ustępu w dokumencie.

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