Inserir Campos
Existem várias maneiras diferentes de inserir campos em um documento:
- usando DocumentBuilder
- usando FieldBuilder
- utilização Aspose.Words Modelo De Objecto Do Documento (DOM)
Neste artigo, examinaremos cada forma com mais detalhes e analisaremos como inserir determinados campos usando essas opções.
Inserir campos num documento utilizando DocumentBuilder
Em Aspose.Words o método InsertField é utilizado para inserir novos campos num documento. O primeiro parâmetro aceita o código de campo completo do campo a inserir. O segundo parâmetro é opcional e permite que o resultado do campo seja definido manualmente. Se isso não for fornecido, o campo é atualizado automaticamente. Você pode passar null ou empty para este parâmetro para inserir um campo com um valor de campo vazio. Se você não tiver certeza sobre a sintaxe do código de campo específico, crie o campo em Microsoft Word Primeiro e alterne para ver seu código de campo.
O exemplo de código a seguir mostra como inserir um campo de mesclagem em um documento usando DocumentBuilder:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
builder->InsertField(u"MERGEFIELD MyFieldName \\* MERGEFORMAT"); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertField.docx"); |
A mesma técnica é usada para inserir campos aninhados em outros campos.
O exemplo de código a seguir mostra como inserir campos aninhados em outro campo usando DocumentBuilder:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
// Insert a few page breaks (just for testing) | |
for (int i = 0; i < 5; i++) | |
{ | |
builder->InsertBreak(BreakType::PageBreak); | |
} | |
// Move the DocumentBuilder cursor into the primary footer. | |
builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary); | |
// We want to insert a field like this: | |
// { IF {PAGE} <> {NUMPAGES} "See Next Page" "Last Page" } | |
System::SharedPtr<Field> field = builder->InsertField(u"IF "); | |
builder->MoveTo(field->get_Separator()); | |
builder->InsertField(u"PAGE"); | |
builder->Write(u" <> "); | |
builder->InsertField(u"NUMPAGES"); | |
builder->Write(u" \"See Next Page\" \"Last Page\" "); | |
field->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertNestedFields.docx"); |
Especificar localidade ao nível do campo
Um identificador de idioma é uma abreviatura numérica internacional padrão para o idioma em um país ou região geográfica. Com Aspose.Words, você pode especificar a localidade no nível do campo usando a propriedade LocaleId, que obtém ou define a localidade do campo ID.
O exemplo de código a seguir mostra como usar essa opção:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto builder = MakeObject<DocumentBuilder>(); | |
SharedPtr<Field> field = builder->InsertField(FieldType::FieldDate, true); | |
field->set_LocaleId(1049); | |
builder->get_Document()->Save(ArtifactsDir + u"WorkingWithFields.SpecifylocaleAtFieldlevel.docx"); |
Inserir Campo Não Digitado / Vazio
Se você deseja inserir campos não digitados / vazios ({}) da mesma forma que Microsoft Word permite, você pode usar o método InsertField com o parâmetro FieldType.FieldNone. Para inserir um campo em um documento do Word, você pode pressionar a combinação de teclas “Ctrl + F9”.
O exemplo de código a seguir mostra como inserir um campo vazio no documento:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
auto field = System::DynamicCast<FieldUnknown>(builder->InsertField(FieldType::FieldNone, false)); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertFieldNone.docx"); |
Inserir campos num documento utilizando FieldBuilder
A forma alternativa de inserir campos em Aspose.Words é a classe FieldBuilder. Ele fornece interface fluente para especificar comutadores de campo e valores de argumento como texto, nós ou mesmo campos aninhados.
O exemplo de código a seguir mostra como inserir um campo em um documento usando FieldBuilder:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto firstName = MakeObject<FieldBuilder>(FieldType::FieldMergeField); | |
firstName->AddArgument("firstname"); | |
auto lastName = MakeObject<FieldBuilder>(FieldType::FieldMergeField); | |
lastName->AddArgument("lastname"); | |
auto firstnameArgumentBuilder = MakeObject<FieldArgumentBuilder>(); | |
firstnameArgumentBuilder->AddText(u"Firstname: "); | |
firstnameArgumentBuilder->AddField(firstName); | |
auto lastnameArgumentBuilder = MakeObject<FieldArgumentBuilder>(); | |
lastnameArgumentBuilder->AddText(u"Lastname: "); | |
lastnameArgumentBuilder->AddField(lastName); | |
// Prepare IF field with two nested MERGEFIELD fields: { IF "left expression" = "right expression" "Firstname: { MERGEFIELD firstname }" "Lastname: { MERGEFIELD lastname }"} | |
auto fieldBuilder = MakeObject<FieldBuilder>(FieldType::FieldIf); | |
fieldBuilder->AddArgument(u"left expression"); | |
fieldBuilder->AddArgument(u"="); | |
fieldBuilder->AddArgument(u"right expression"); | |
fieldBuilder->AddArgument(firstnameArgumentBuilder); | |
fieldBuilder->AddArgument(lastnameArgumentBuilder); | |
auto field = fieldBuilder->BuildAndInsert(doc->get_FirstSection()->get_Body()->AppendParagraph(String::Empty)); | |
field->Update(); | |
doc->Save(ArtifactsDir + u"Field.InsertFieldUsingFieldBuilder.docx"); |
Inserir Campos utilizando DOM
Você também pode inserir vários tipos de campos usando Aspose.Words Modelo De Objecto Do Documento (DOM). Nesta secção, veremos alguns exemplos.
Inserindo o campo de mesclagem em um documento usando DOM
O campo MERGEFIELD
no documento do Word pode ser representado pela classe FieldMergeField. Você pode usar a classe FieldMergeField para executar as seguintes operações:
- especifique o nome do campo de mesclagem
- especifique a formatação do campo de mesclagem
- especifique o texto que está entre o separador de campo e o fim do campo do campo de mesclagem
- especifique o texto a ser inserido após o campo de mesclagem se o campo não estiver em branco
- especifique o texto a ser inserido antes do campo de mesclagem se o campo não estiver em branco
O exemplo de código a seguir mostra como adicionar o campo MERGE
usando DOM a um parágrafo em um documento:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0)); | |
builder->MoveTo(para); | |
// We want to insert a merge field like this: | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" } | |
auto field = System::DynamicCast<FieldMergeField>(builder->InsertField(FieldType::FieldMergeField, false)); | |
// { " MERGEFIELD Test1" } | |
field->set_FieldName(u"Test1"); | |
// { " MERGEFIELD Test1 \\b Test2" } | |
field->set_TextBefore(u"Test2"); | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 } | |
field->set_TextAfter(u"Test3"); | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m" } | |
field->set_IsMapped(true); | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" } | |
field->set_IsVerticalFormatting(true); | |
field->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertMergeFieldUsingDOM.docx"); |
Inserir Mail Merge campo de bloco de endereços num documento utilizando DOM
O campo ADDRESSBLOCK
é utilizado para inserir um bloco de endereços Mail Merge num documento do Word. O campo ADDRESSBLOCK
no documento do Word pode ser representado pela classe FieldAddressBlock. Você pode usar a classe FieldAddressBlock para executar as seguintes operações:
- especificar se deve incluir o nome do país / região no campo
- especificar se deve formatar o endereço de acordo com o país / região do destinatário, tal como definido em POST * CODE (União Postal Universal 2006)
- especificar o nome do país/região excluído
- especificar o nome e o formato do endereço
- especificar o idioma ID utilizado para formatar o endereço
O exemplo de código a seguir mostra como adicionar o campo Mail Merge ADDRESSBLOCK
usando DOM a um parágrafo em um documento:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_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\" } | |
auto field = System::DynamicCast<FieldAddressBlock>(builder->InsertField(FieldType::FieldAddressBlock, false)); | |
// { ADDRESSBLOCK \\c 1" } | |
field->set_IncludeCountryOrRegionName(u"1"); | |
// { ADDRESSBLOCK \\c 1 \\d" } | |
field->set_FormatAddressOnCountryOrRegion(true); | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 } | |
field->set_ExcludedCountryOrRegionName(u"Test2"); | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 } | |
field->set_NameAndAddressFormat(u"Test3"); | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" } | |
field->set_LanguageId(u"Test 4"); | |
field->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertMailMergeAddressBlockFieldUsingDOM.docx"); | |
Inserir um campo avançado num documento sem utilizar DocumentBuilder
O campo ADVANCE
é utilizado para deslocar o texto subsequente dentro de uma linha à esquerda, à direita, para cima ou para baixo. O campo ADVANCE
no documento do Word pode ser representado pela classe FieldAdvance. Você pode usar a classe FieldAdvance para executar as seguintes operações:
- especifique o número de pontos pelos quais o texto que segue o campo deve ser movido verticalmente a partir da borda superior da página
- especifique o número de pontos pelos quais o texto que segue o campo deve ser movido horizontalmente a partir da borda esquerda da coluna, quadro ou caixa de texto
- especificar o número de pontos pelos quais o texto que segue o campo deve ser movido para a esquerda, direita, para cima ou para baixo
O exemplo de código a seguir mostra como adicionar o campo ADVANCE
usando DOM a um parágrafo em um documento:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_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 } | |
auto field = System::DynamicCast<FieldAdvance>(para->AppendField(FieldType::FieldAdvance, false)); | |
// { ADVANCE \\d 10 " } | |
field->set_DownOffset(u"10"); | |
// { ADVANCE \\d 10 \\l 10 } | |
field->set_LeftOffset(u"10"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 } | |
field->set_RightOffset(u"-3.3"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 } | |
field->set_UpOffset(u"0"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 } | |
field->set_HorizontalPosition(u"100"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 } | |
field->set_VerticalPosition(u"100"); | |
field->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertAdvanceFieldWithOutDocumentBuilder.docx"); |
Inserir o campo ASK
num documento sem utilizar DocumentBuilder
O campo ASK
é utilizado para solicitar ao utilizador que o texto atribua a um marcador no documento do Word. O campo ASK
no documento do Word pode ser representado pela classe FieldAsk. Você pode usar a classe FieldAsk para executar as seguintes operações:
- especifique o nome do marcador
- especifique a resposta padrão do Usuário (valor inicial contido na janela do prompt)
- especificar se a resposta do utilizador deve ser recebida uma vez por uma operação mail merge
- especifique o texto do prompt (O título da janela do prompt)
O exemplo de código a seguir mostra como adicionar o campo ASK
usando DOM a um parágrafo em um documento:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0)); | |
// We want to insert an Ask field like this: | |
// { ASK \"Test 1\" Test2 \\d Test3 \\o } | |
auto field = System::DynamicCast<FieldAsk>(para->AppendField(FieldType::FieldAsk, false)); | |
// { ASK \"Test 1\" " } | |
field->set_BookmarkName(u"Test 1"); | |
// { ASK \"Test 1\" Test2 } | |
field->set_PromptText(u"Test2"); | |
// { ASK \"Test 1\" Test2 \\d Test3 } | |
field->set_DefaultResponse(u"Test3"); | |
// { ASK \"Test 1\" Test2 \\d Test3 \\o } | |
field->set_PromptOnceOnMailMerge(true); | |
field->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertASKFieldWithOutDocumentBuilder.docx"); |
Inserir o campo AUTHOR
num documento sem utilizar DocumentBuilder
O campo AUTHOR
é utilizado para especificar o nome do autor do documento a partir das propriedades Document
. O campo AUTHOR
no documento do Word pode ser representado pela classe FieldAuthor. Você pode usar a classe FieldAuthor para executar as seguintes operações:
- especificar o nome do autor do documento
O exemplo de código a seguir mostra como adicionar o campo AUTHOR
usando DOM a um parágrafo em um documento:
Inserir o campo INCLUDETEXT
num documento sem utilizar DocumentBuilder
O campo INCLUDETEXT
insere o texto e os gráficos contidos no documento indicado no código do campo. Pode inserir o documento inteiro ou uma parte do documento referido por um marcador. Este campo no documento do Word é representado por INCLUDETEXT. Você pode usar a classe FieldIncludeText para executar as seguintes operações:
- especifique o nome do marcador do documento incluído
- especificar a localização do documento
O exemplo de código a seguir mostra como adicionar o campo INCLUDETEXT
usando DOM a um parágrafo em um documento:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto para = MakeObject<Paragraph>(doc); | |
// We want to insert an INCLUDETEXT field like this: | |
// { INCLUDETEXT "file path" } | |
auto fieldIncludeText = System::DynamicCast<FieldIncludeText>(para->AppendField(FieldType::FieldIncludeText, false)); | |
fieldIncludeText->set_BookmarkName(u"bookmark"); | |
fieldIncludeText->set_SourceFullName(MyDir + u"IncludeText.docx"); | |
doc->get_FirstSection()->get_Body()->AppendChild(para); | |
fieldIncludeText->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertIncludeFieldWithoutDocumentBuilder.docx"); |
Inserir o campo TOA
num documento sem utilizar DocumentBuilder
O campo TOA
(Table of Authorities) cria e insere uma tabela de autoridades. O campo TOA
recolhe entradas marcadas por campos TA
(Table of Authorities Entry). O Microsoft Office Word insere o campo TOA
quando clica em Insert Table of Authorities no grupo Table of Authorities no separador References. Quando visualiza o campo TOA
no documento, a sintaxe é semelhante a esta:
{ TOA
[Switches ] }
O exemplo de código a seguir mostra como adicionar o campo TOA
usando DOM a um parágrafo em um documento:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto para = MakeObject<Paragraph>(doc); | |
// We want to insert TA and TOA fields like this: | |
// { TA \c 1 \l "Value 0" } | |
// { TOA \c 1 } | |
auto fieldTA = System::DynamicCast<FieldTA>(para->AppendField(FieldType::FieldTOAEntry, false)); | |
fieldTA->set_EntryCategory(u"1"); | |
fieldTA->set_LongCitation(u"Value 0"); | |
doc->get_FirstSection()->get_Body()->AppendChild(para); | |
para = MakeObject<Paragraph>(doc); | |
auto fieldToa = System::DynamicCast<FieldToa>(para->AppendField(FieldType::FieldTOA, false)); | |
fieldToa->set_EntryCategory(u"1"); | |
doc->get_FirstSection()->get_Body()->AppendChild(para); | |
fieldToa->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertTOAFieldWithoutDocumentBuilder.docx"); |