Insertar Campos

Hay varias formas diferentes de insertar campos en un documento:

En este artículo, veremos cada forma con más detalle y analizaremos cómo insertar ciertos campos usando estas opciones.

Insertar campos en un documento usando DocumentBuilder

En Aspose.Words, el método InsertField se usa para insertar nuevos campos en un documento. El primer parámetro acepta el código de campo completo del campo a insertar. El segundo parámetro es opcional y permite configurar manualmente el resultado del campo. Si no se proporciona, el campo se actualiza automáticamente. Puede pasar nulo o vacío a este parámetro para insertar un campo con un valor de campo vacío. Si no está seguro de la sintaxis del código de campo en particular, cree primero el campo en Microsoft Word y cambie para ver su código de campo.

El siguiente ejemplo de código muestra cómo insertar un campo de combinación en un documento usando 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");

Se utiliza la misma técnica para insertar campos anidados dentro de otros campos.

El siguiente ejemplo de código demuestra cómo insertar campos anidados dentro de otro campo usando 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");

Especifique la configuración regional a Nivel de Campo

Un identificador de idioma es una abreviatura numérica internacional estándar para el idioma en un país o región geográfica. Con Aspose.Words, puede especificar la configuración regional a nivel de campo utilizando la propiedad LocaleId, que obtiene o establece la configuración regional ID del campo.

El siguiente ejemplo de código muestra cómo usar esta opción:

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

Insertar Campo sin Tipo / Vacío

Si desea insertar campos sin tipo / vacíos ({}) tal como Microsoft Word lo permite, puede usar el método InsertField con el parámetro FieldType.FieldNone. Para insertar un campo en un documento de Word, puede presionar la combinación de teclas “Ctrl + F9”.

El siguiente ejemplo de código muestra cómo insertar un campo vacío en el documento:

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

Insertar COMPARE Campo

El campo COMPARE compara dos valores y devuelve el valor numérico 1 si la comparación es verdadera o 0 si la comparación es falsa.

El siguiente ejemplo de código muestra cómo agregar COMPARE campos usando 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");

Insertar IF Campo

El campo IF se puede utilizar para evaluar argumentos de forma condicional.

El siguiente ejemplo de código muestra cómo agregar IF campos usando 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");

Insertar campos en un documento usando FieldBuilder

La forma alternativa de insertar campos en Aspose.Words es la clase FieldBuilder. Proporciona una interfaz fluida para especificar modificadores de campo y valores de argumento como texto, nodos o incluso campos anidados.

El siguiente ejemplo de código muestra cómo insertar un campo en un documento usando 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");

Insertar campos usando DOM

También puede insertar varios tipos de campos usando Aspose.Words Modelo de objetos de documento (DOM). En esta sección, veremos algunos ejemplos.

Insertar un campo de combinación en un documento usando DOM

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

  • especifique el nombre del campo de combinación
  • especifique el formato del campo de combinación
  • especifique el texto que se encuentra entre el separador de campo y el final del campo del campo de combinación
  • especifique el texto que se insertará después del campo de combinación si el campo no está en blanco
  • especifique el texto que se insertará antes del campo de combinación si el campo no está en blanco

El siguiente ejemplo de código muestra cómo agregar el campo MERGE usando DOM a un párrafo de un documento:

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

Insertar el campo Mail Merge ADDRESSBLOCK en un documento usando DOM

El campo ADDRESSBLOCK se usa para insertar un bloque de direcciones Mail Merge en un documento de Word. El campo ADDRESSBLOCK en el documento de Word puede representarse mediante la clase FieldAddressBlock. Puede usar la clase FieldAddressBlock para realizar las siguientes operaciones:

  • especifique si desea incluir el nombre del país / región en el campo
  • especifique si desea formatear la dirección de acuerdo con el país/región del destinatario según lo definido por POST * CODE (Unión Postal Universal 2006)
  • especifique el nombre del país/región excluido
  • especifique el nombre y el formato de la dirección
  • especifique el idioma ID utilizado para formatear la dirección

El siguiente ejemplo de código muestra cómo agregar el campo Mail Merge ADDRESSBLOCK usando DOM a un párrafo de un documento:

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

Insertar el campo ADVANCE en un documento sin usar DocumentBuilder

El campo ADVANCE se usa para desplazar el texto subsiguiente dentro de una línea hacia la izquierda, derecha, arriba o abajo. El campo ADVANCE en el documento de Word puede representarse mediante la clase FieldAdvance. Puede usar la clase FieldAdvance para realizar las siguientes operaciones:

  • especifique el número de puntos en los que el texto que sigue al campo debe moverse verticalmente desde el borde superior de la página
  • especifique el número de puntos en los que el texto que sigue al campo debe moverse horizontalmente desde el borde izquierdo de la columna, el marco o el cuadro de texto
  • especifique el número de puntos en los que se debe mover el texto que sigue al campo hacia la izquierda, derecha, arriba o abajo.

El siguiente ejemplo de código muestra cómo agregar el campo ADVANCE usando DOM a un párrafo de un documento:

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

Insertar el campo ASK en un documento sin usar DocumentBuilder

El campo ASK se usa para solicitar al usuario texto para asignar a un marcador en un documento de Word. El campo ASK en el documento de Word puede representarse mediante la clase FieldAsk. Puede usar la clase FieldAsk para realizar las siguientes operaciones:

  • especifique el nombre del marcador
  • especifique la respuesta predeterminada del usuario (valor inicial contenido en la ventana de solicitud)
  • especifique si la respuesta del usuario debe recibirse una vez por operación Mail Merge
  • especifique el texto del mensaje (el título de la ventana del mensaje)

El siguiente ejemplo de código muestra cómo agregar el campo ASK usando DOM a un párrafo de un documento:

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

Insertar el campo AUTHOR en un documento sin usar DocumentBuilder

El campo AUTHOR se usa para especificar el nombre del autor del documento de las propiedades Document. El campo AUTHOR en el documento de Word puede representarse mediante la clase FieldAuthor. Puede usar la clase FieldAuthor para realizar las siguientes operaciones:

  • especifique el nombre del autor del documento

El siguiente ejemplo de código muestra cómo agregar el campo AUTHOR usando DOM a un párrafo de un documento:

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

Insertar el campo INCLUDETEXT en un documento sin usar DocumentBuilder

El campo INCLUDETEXT inserta el texto y los gráficos contenidos en el documento nombrado en el código del campo. Puede insertar el documento completo o una parte del documento al que se hace referencia mediante un marcador. Este campo en el documento de Word está representado por INCLUDETEXT. Puede usar la clase FieldIncludeText para realizar las siguientes operaciones:

  • especifique el nombre del marcador del documento incluido
  • especifique la ubicación del documento

El siguiente ejemplo de código muestra cómo agregar el campo INCLUDETEXT usando DOM a un párrafo de un documento:

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

Insertar el campo TOA en un documento sin usar DocumentBuilder

El campo TOA (Table of Authorities) genera e inserta una tabla de autoridades. El campo TOA recopila entradas marcadas con campos TA (Table of Authorities Entry). Microsoft Office Word inserta el campo TOA cuando hace clic en Insert Table of Authorities en el grupo Table of Authorities en la pestaña References. Cuando ve el campo TOA en su documento, la sintaxis se ve así:

{ TOA [Switches ] }

El siguiente ejemplo de código muestra cómo agregar el campo TOA usando DOM a un párrafo de un documento.

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