Velden toevoegen

Er zijn verschillende manieren om velden in een document in te voegen:

In dit artikel, zullen we kijken naar elke manier in meer detail en analyseren hoe bepaalde velden invoegen met behulp van deze opties.

Velden in een document invoegen met DocumentBuilder

In Aspose.Words de InsertField methode wordt gebruikt om nieuwe velden in een document in te voegen. De eerste parameter accepteert de volledige veldcode van het in te voegen veld. De tweede parameter is optioneel en staat het veldresultaat van het veld handmatig in te stellen. Als dit niet wordt geleverd, wordt het veld automatisch bijgewerkt. U kunt null of leeg doorgeven aan deze parameter om een veld met een lege veldwaarde in te voegen. Als u niet zeker bent over de specifieke veldcode syntax, maak het veld in Microsoft Word eerst en switch om zijn veldcode te zien.

Het volgende voorbeeld van code laat zien hoe je een merge veld invoegt in een document met behulp van 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");

Dezelfde techniek wordt gebruikt om velden in andere velden in te voegen.

Het volgende voorbeeld van code laat zien hoe je velden in een ander veld invoegt met behulp van 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");

Lokale opgeven op veldniveau

Een taalidentificatiecode is een standaard internationale numerieke afkorting voor de taal in een land of geografische regio. Met Aspose.Words, U kunt de locatie op het veldniveau specificeren met behulp van de LocaleId eigenschap, die de locatie-id van het veld krijgt of stelt.

Het volgende voorbeeld van code laat zien hoe u deze optie kunt gebruiken:

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

Niet-getypte/leeg veld invoegen

Als u ongetypte/lege velden wilt invoegen ({}) net als Microsoft Word kunt u de InsertField methode met de FieldType.FieldNone parameter. Om een veld in een Word-document in te voegen, kunt u op de combinatie van de sleutels

Het volgende voorbeeld van code laat zien hoe je een leeg veld in het document invoegt:

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

Invoegen COMPARE Veld

De COMPARE veld vergelijkt twee waarden en geeft de numerieke waarde 1 terug als de vergelijking true of 0 als de vergelijking false.

Het volgende voorbeeld van code laat zien hoe toe te voegen COMPARE velden die DocumentBuilder gebruiken:

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

Invoegen IF Veld

De IF veld kan worden gebruikt om argumenten voorwaardelijk te evalueren.

Het volgende voorbeeld van code laat zien hoe toe te voegen IF velden die DocumentBuilder gebruiken:

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

Velden invoegen in een document met FieldBuilder

De alternatieve manier om velden in te voegen Aspose.Words is de FieldBuilder Klasse. Het biedt een vloeiende interface om veldschakelaars en argumentwaarden te specificeren als tekst, nodes of zelfs geneste velden.

Het volgende voorbeeld van code laat zien hoe je een veld in een document invoegt met behulp van 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");

Velden invoegen met DOM

U kunt ook verschillende soorten velden invoegen met Aspose.Words Document Object Model (DOM). In dit hoofdstuk zullen we enkele voorbeelden bekijken.

Samenvoegen Veld in een document met DOM

MERGEFIELD veld in Word document kan worden vertegenwoordigd door de FieldMergeField Klasse. U kunt FieldMergeField klasse om de volgende bewerkingen uit te voeren:

  • geef de naam van het mergeveld
  • geef de opmaak van het mergeveld op
  • geef de tekst aan die tussen het veldscheidingsteken en het veldeinde van het mergeveld ligt
  • geef aan welke tekst moet worden ingevoegd na het mergeveld als het veld niet leeg is
  • geef aan welke tekst vóór het mergeveld moet worden ingevoegd als het veld niet leeg is

Het volgende voorbeeld van code laat zien hoe u de MERGE veld gebruiken DOM naar een paragraaf in een document:

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

Invoegen Mail Merge ADDRESSBLOCK veld in een document met DOM

De ADDRESSBLOCK veld wordt gebruikt om een Mail Merge adresblok in een Word-document. ADDRESSBLOCK veld in Word document kan worden vertegenwoordigd door de FieldAddressBlock Klasse. U kunt FieldAddressBlock klasse om de volgende bewerkingen uit te voeren:

  • specificeren of de naam van het land/gebied in het veld moet worden vermeld
  • te specificeren of het adres moet worden opgemaakt volgens het land/regio van de ontvanger zoals gedefinieerd in POST*CODE (Universele Postunie 2006)
  • de naam van het uitgesloten land/regio specificeren
  • naam en adresformaat specificeren
  • geef de taal-ID op die wordt gebruikt om het adres te formatteren

Het volgende voorbeeld van code laat zien hoe u de Mail Merge ADDRESSBLOCK Veld DOM naar een paragraaf in een document:

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

Invoegen ADVANCE veld in een document zonder DocumentBuilder te gebruiken

De ADVANCE veld wordt gebruikt om volgende tekst te compenseren binnen een regel naar links, rechts, omhoog of omlaag. ADVANCE veld in Word document kan worden vertegenwoordigd door de FieldAdvance Klasse. U kunt de FieldAdvance klasse om de volgende bewerkingen uit te voeren:

  • geef het aantal punten aan waarmee de tekst die het veld volgt verticaal van de bovenste rand van de pagina moet worden verplaatst
  • geef het aantal punten aan waarmee de tekst die het veld volgt horizontaal van de linkerkant van de kolom, het frame of het tekstvak moet worden verplaatst
  • geef het aantal punten aan waarmee de tekst die volgt op het veld links, rechts, omhoog of omlaag moet worden verplaatst

Het volgende voorbeeld van code laat zien hoe u de ADVANCE Veld DOM naar een paragraaf in een document:

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

Invoegen ASK veld in een document zonder DocumentBuilder te gebruiken

De ASK veld wordt gebruikt om de gebruiker te vragen om tekst toe te wijzen aan een bladwijzer in Word-document. ASK veld in Word document kan worden vertegenwoordigd door de FieldAsk Klasse. U kunt FieldAsk klasse om de volgende bewerkingen uit te voeren:

  • geef de naam van de bladwijzer op
  • Geef standaard gebruikersantwoord op (eerste waarde in het prompt venster)
  • geef aan of de reactie van de gebruiker eenmaal per Mail Merge werking
  • geef de prompttekst (de titel van het promptvenster)

Het volgende voorbeeld van code laat zien hoe u de ASK Veld DOM naar een paragraaf in een document:

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

Invoegen AUTHOR veld in een document zonder DocumentBuilder te gebruiken

De AUTHOR veld wordt gebruikt om de naam van de auteur van het document van de Document eigenschappen. AUTHOR veld in Word document kan worden vertegenwoordigd door de FieldAuthor Klasse. U kunt FieldAuthor klasse om de volgende bewerkingen uit te voeren:

  • geef de naam van de auteur op

Het volgende voorbeeld van code laat zien hoe u de AUTHOR Veld DOM naar een paragraaf in een document:

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

Invoegen INCLUDETEXT veld in een document zonder DocumentBuilder te gebruiken

De INCLUDETEXT veld voegt de tekst en afbeeldingen in het document in de veldcode. U kunt het gehele document of een deel van het document waarnaar een bladwijzer verwijst, invoegen. Dit veld in Word-document wordt vertegenwoordigd door IMPLETEXT. U kunt FieldIncludeText klasse om de volgende bewerkingen uit te voeren:

  • geef de naam van de bladwijzer op van bijgesloten document
  • geef de locatie van het document

Het volgende voorbeeld van code laat zien hoe u de INCLUDETEXT veld gebruiken DOM naar een paragraaf in een document:

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

Invoegen TOA veld in een document zonder DocumentBuilder te gebruiken

De TOA Het veld (tabel van autoriteiten) bouwt en voegt een tabel van autoriteiten toe. De TOA veld verzamelt items gemarkeerd door TA (Toegangstabel) velden. Microsoft Office Word voegt de TOA veld wanneer u op Invoegen tabel van autoriteiten in de Lijst van instanties groep op de References tab. Wanneer u de TOA veld in uw document, de syntax ziet er als volgt uit:

{ TOA [Switches ] }

Het volgende voorbeeld van code laat zien hoe u de TOA veld gebruiken DOM een paragraaf in een document.

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