Wstaw pola
Istnieje kilka różnych sposobów wstawiania pól do dokumentu:
- przy użyciu DocumentBuilder
- przy użyciu FieldBuilder
- przy użyciu Aspose.Words Document Object Model (DOM)
W tym artykule przyjrzymy się każdemu sposobowi bardziej szczegółowo i przeanalizujemy, jak wstawić określone pola za pomocą tych opcji.
Wstawianie pól do dokumentu przy użyciu narzędzia DocumentBuilder
W Aspose.Words metoda InsertField służy do wstawiania nowych pól do dokumentu. Pierwszy parametr akceptuje pełny kod pola, które ma zostać wstawione. Drugi parametr jest opcjonalny i umożliwia ręczne ustawienie wyniku pola. Jeśli nie zostanie to podane, pole zostanie automatycznie zaktualizowane. Do tego parametru można przekazać wartość null lub pusty, aby wstawić pole z wartością pustego pola. Jeśli nie masz pewności co do składni konkretnego kodu pola, utwórz najpierw pole w formacie Microsoft Word i przełącz się, aby zobaczyć jego kod pola.
Poniższy przykład kodu pokazuje, jak wstawić pole scalania do dokumentu przy użyciu DocumentBuilder:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.InsertField(@"MERGEFIELD MyFieldName \* MERGEFORMAT"); | |
doc.Save(ArtifactsDir + "WorkingWithFields.InsertField.docx"); |
Tę samą technikę stosuje się do wstawiania pól zagnieżdżonych w innych polach.
Poniższy przykład kodu pokazuje, jak wstawić pola zagnieżdżone w innym polu za pomocą DocumentBuilder:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
for (int i = 0; i < 5; i++) | |
builder.InsertBreak(BreakType.PageBreak); | |
builder.MoveToHeaderFooter(HeaderFooterType.FooterPrimary); | |
// We want to insert a field like this: | |
// { IF {PAGE} <> {NUMPAGES} "See Next Page" "Last Page" } | |
Field field = builder.InsertField(@"IF "); | |
builder.MoveTo(field.Separator); | |
builder.InsertField("PAGE"); | |
builder.Write(" <> "); | |
builder.InsertField("NUMPAGES"); | |
builder.Write(" \"See Next Page\" \"Last Page\" "); | |
field.Update(); | |
doc.Save(ArtifactsDir + "WorkingWithFields.InsertNestedFields.docx"); |
Określ ustawienia regionalne na poziomie pola
Identyfikator języka to standardowy międzynarodowy skrót numeryczny języka danego kraju lub regionu geograficznego. W Aspose.Words można określić ustawienia regionalne na poziomie pola przy użyciu właściwości LocaleId, która pobiera lub ustawia identyfikator ustawień regionalnych pola.
Poniższy przykład kodu pokazuje, jak używać tej opcji:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
DocumentBuilder builder = new DocumentBuilder(); | |
Field field = builder.InsertField(FieldType.FieldDate, true); | |
field.LocaleId = 1049; | |
builder.Document.Save(ArtifactsDir + "WorkingWithFields.SpecifylocaleAtFieldlevel.docx"); |
Wstaw niewpisane/puste pole
Jeśli chcesz wstawić niewpisane/puste pola ({}), tak jak pozwala na to Microsoft Word, możesz użyć metody InsertField z parametrem FieldType.FieldNone. Aby wstawić pole do dokumentu Word, możesz nacisnąć kombinację klawiszy “Ctrl + F9”.
Poniższy przykład kodu pokazuje, jak wstawić puste pole do dokumentu:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
FieldUnknown field = (FieldUnknown) builder.InsertField(FieldType.FieldNone, false); | |
doc.Save(ArtifactsDir + "WorkingWithFields.InsertFieldNone.docx"); |
Wstawianie pól do dokumentu za pomocą FieldBuilder
Alternatywnym sposobem wstawiania pól w Aspose.Words jest klasa FieldBuilder. Zapewnia płynny interfejs do określania przełączników pól i wartości argumentów jako tekstu, węzłów, a nawet pól zagnieżdżonych.
Poniższy przykład kodu pokazuje, jak wstawić pole do dokumentu za pomocą FieldBuilder:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
// Prepare IF field with two nested MERGEFIELD fields: { IF "left expression" = "right expression" "Firstname: { MERGEFIELD firstname }" "Lastname: { MERGEFIELD lastname }"} | |
FieldBuilder fieldBuilder = new FieldBuilder(FieldType.FieldIf) | |
.AddArgument("left expression") | |
.AddArgument("=") | |
.AddArgument("right expression") | |
.AddArgument( | |
new FieldArgumentBuilder() | |
.AddText("Firstname: ") | |
.AddField(new FieldBuilder(FieldType.FieldMergeField).AddArgument("firstname"))) | |
.AddArgument( | |
new FieldArgumentBuilder() | |
.AddText("Lastname: ") | |
.AddField(new FieldBuilder(FieldType.FieldMergeField).AddArgument("lastname"))); | |
// Insert IF field in exact location | |
Field field = fieldBuilder.BuildAndInsert(doc.FirstSection.Body.FirstParagraph); | |
field.Update(); | |
doc.Save(ArtifactsDir + "Field.InsertFieldUsingFieldBuilder.docx"); |
Wstawianie pól za pomocą DOM
Za pomocą Aspose.Words Document Object Model (DOM) możesz także wstawiać różne typy pól. W tej sekcji przyjrzymy się kilku przykładom.
Wstawianie pola scalania do dokumentu za pomocą DOM
Pole MERGEFIELD
w dokumencie Word może być reprezentowane przez klasę FieldMergeField. Klasę FieldMergeField można wykorzystać do wykonania następujących operacji:
- określ nazwę pola scalania
- określ formatowanie pola scalania
- określ tekst znajdujący się pomiędzy separatorem pola a końcem pola scalającego
- określ tekst, który ma zostać wstawiony po polu scalającym, jeśli pole nie jest puste
- określ tekst, który ma zostać wstawiony przed polem scalania, jeśli pole nie jest puste
Poniższy przykład kodu pokazuje, jak dodać pole MERGE
za pomocą formatu DOM do akapitu w dokumencie:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[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.FieldMergeField, false); | |
// { " MERGEFIELD Test1" } | |
field.FieldName = "Test1"; | |
// { " MERGEFIELD Test1 \\b Test2" } | |
field.TextBefore = "Test2"; | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 } | |
field.TextAfter = "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(ArtifactsDir + "WorkingWithFields.InsertMergeFieldUsingDOM.docx"); |
Wstawianie pola Mail Merge ADDRESSBLOCK
do dokumentu przy użyciu formatu DOM
Pole ADDRESSBLOCK
służy do wstawienia bloku adresu Mail Merge do dokumentu Word. Pole ADDRESSBLOCK
w dokumencie Word może być reprezentowane przez klasę FieldAddressBlock. Za pomocą klasy FieldAddressBlock możesz wykonać następujące operacje:
- określ, czy w polu ma być zawarta nazwa kraju/regionu
- określ, czy adres ma być formatowany zgodnie z krajem/regionem odbiorcy zgodnie z definicją POST*CODE (Powszechny Związek Pocztowy 2006)
- podaj nazwę wykluczonego kraju/regionu
- określ format nazwy i adresu
- określ identyfikator języka używany do formatowania adresu
Poniższy przykład kodu pokazuje, jak dodać pole Mail Merge ADDRESSBLOCK
przy użyciu formatu DOM do akapitu w dokumencie:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[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.FieldAddressBlock, false); | |
// { ADDRESSBLOCK \\c 1" } | |
field.IncludeCountryOrRegionName = "1"; | |
// { ADDRESSBLOCK \\c 1 \\d" } | |
field.FormatAddressOnCountryOrRegion = true; | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 } | |
field.ExcludedCountryOrRegionName = "Test2"; | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 } | |
field.NameAndAddressFormat = "Test3"; | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" } | |
field.LanguageId = "Test 4"; | |
field.Update(); | |
doc.Save(ArtifactsDir + "WorkingWithFields.InsertMailMergeAddressBlockFieldUsingDOM.docx"); |
Wstawianie pola ADVANCE
do dokumentu bez użycia narzędzia DocumentBuilder
Pole ADVANCE
służy do przesuwania kolejnego tekstu w wierszu w lewo, w prawo, w górę lub w dół. Pole ADVANCE
w dokumencie Word może być reprezentowane przez klasę FieldAdvance. Klasę FieldAdvance można wykorzystać do wykonania następujących operacji:
- określ liczbę punktów, o jaką tekst następujący po polu powinien zostać odsunięty w pionie od górnej krawędzi strony
- określić liczbę punktów, o jaką tekst następujący za polem powinien zostać przesunięty poziomo od lewej krawędzi kolumny, ramki lub pola tekstowego
- określ liczbę punktów, o jaką tekst następujący po polu ma zostać przesunięty w lewo, w prawo, w górę lub w dół
Poniższy przykład kodu pokazuje, jak dodać pole ADVANCE
za pomocą formatu DOM do akapitu w dokumencie:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[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.FieldAdvance, false); | |
// { ADVANCE \\d 10 " } | |
field.DownOffset = "10"; | |
// { ADVANCE \\d 10 \\l 10 } | |
field.LeftOffset = "10"; | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 } | |
field.RightOffset = "-3.3"; | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 } | |
field.UpOffset = "0"; | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 } | |
field.HorizontalPosition = "100"; | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 } | |
field.VerticalPosition = "100"; | |
field.Update(); | |
doc.Save(ArtifactsDir + "WorkingWithFields.InsertAdvanceFieldWithOutDocumentBuilder.docx"); |
Wstawianie pola ASK
do dokumentu bez użycia narzędzia DocumentBuilder
Pole ASK
służy do monitowania użytkownika o tekst do przypisania do zakładki w dokumencie programu Word. Pole ASK
w dokumencie Word może być reprezentowane przez klasę FieldAsk. Klasę FieldAsk można wykorzystać do wykonania następujących operacji:
- podaj nazwę zakładki
- określ domyślną reakcję użytkownika (wartość początkowa zawarta w oknie zachęty)
- określ, czy odpowiedź użytkownika powinna być odbierana raz na operację mail merge
- określ tekst zachęty (tytuł okna podpowiedzi)
Poniższy przykład kodu pokazuje, jak dodać pole ASK
za pomocą formatu DOM do akapitu w dokumencie:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0]; | |
// We want to insert an Ask field like this: | |
// { ASK \"Test 1\" Test2 \\d Test3 \\o } | |
FieldAsk field = (FieldAsk) para.AppendField(FieldType.FieldAsk, false); | |
// { ASK \"Test 1\" " } | |
field.BookmarkName = "Test 1"; | |
// { ASK \"Test 1\" Test2 } | |
field.PromptText = "Test2"; | |
// { ASK \"Test 1\" Test2 \\d Test3 } | |
field.DefaultResponse = "Test3"; | |
// { ASK \"Test 1\" Test2 \\d Test3 \\o } | |
field.PromptOnceOnMailMerge = true; | |
field.Update(); | |
doc.Save(ArtifactsDir + "WorkingWithFields.InsertASKFieldWithOutDocumentBuilder.docx"); |
Wstawianie pola AUTHOR
do dokumentu bez użycia narzędzia DocumentBuilder
Pole AUTHOR
służy do podania nazwiska autora Dokumentu na podstawie właściwości Document
. Pole AUTHOR
w dokumencie Word może być reprezentowane przez klasę FieldAuthor. Za pomocą klasy FieldAuthor możesz wykonać następujące operacje:
- podać nazwisko autora dokumentu
Poniższy przykład kodu pokazuje, jak dodać pole AUTHOR
za pomocą formatu DOM do akapitu w dokumencie:
Wstawianie pola INCLUDETEXT
do dokumentu bez użycia narzędzia DocumentBuilder
Pole INCLUDETEXT
wstawia tekst i grafikę zawartą w dokumencie nazwanym w kodzie pola. Można wstawić cały dokument lub jego część, do której odnosi się zakładka. To pole w dokumencie Word jest reprezentowane przez INCLUDETEXT. Klasę FieldIncludeText można wykorzystać do wykonania następujących operacji:
- podaj nazwę zakładki dołączanego dokumentu
- określ lokalizację dokumentu
Poniższy przykład kodu pokazuje, jak dodać pole INCLUDETEXT
za pomocą formatu DOM do akapitu w dokumencie:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
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.FieldIncludeText, false); | |
fieldIncludeText.BookmarkName = "bookmark"; | |
fieldIncludeText.SourceFullName = MyDir + "IncludeText.docx"; | |
doc.FirstSection.Body.AppendChild(para); | |
fieldIncludeText.Update(); | |
doc.Save(ArtifactsDir + "WorkingWithFields.InsertIncludeFieldWithoutDocumentBuilder.docx"); |
Wstawianie pola TOA
do dokumentu bez użycia narzędzia DocumentBuilder
Pole TOA
(Tabela źródeł) tworzy i wstawia tabelę źródeł. Pole TOA
gromadzi wpisy oznaczone polami TA
(Table of Authorities Entry). Microsoft Office Word wstawia pole TOA
po kliknięciu Wstaw tabelę źródeł w grupie Tabela władz na karcie References. Gdy przeglądasz pole TOA
w swoim dokumencie, składnia wygląda następująco:
{ TOA
[Switches ] }
Poniższy przykład kodu pokazuje, jak dodać pole TOA
za pomocą formatu DOM do akapitu w dokumencie:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
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.FieldTOAEntry, false); | |
fieldTA.EntryCategory = "1"; | |
fieldTA.LongCitation = "Value 0"; | |
doc.FirstSection.Body.AppendChild(para); | |
para = new Paragraph(doc); | |
FieldToa fieldToa = (FieldToa) para.AppendField(FieldType.FieldTOA, false); | |
fieldToa.EntryCategory = "1"; | |
doc.FirstSection.Body.AppendChild(para); | |
fieldToa.Update(); | |
doc.Save(ArtifactsDir + "WorkingWithFields.InsertTOAFieldWithoutDocumentBuilder.docx"); |