Insertar Campos
Hay varias formas diferentes de insertar campos en un documento:
- usando DocumentBuilder
- usando FieldBuilder
- usando Aspose.Words Modelo de objetos de documento (DOM)
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:
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"); |