Вставка полей
Существует несколько различных способов вставки полей в документ:
- используя DocumentBuilder
- используя FieldBuilder
- с помощью Aspose.Words Объектная модель документа (DOM)
В этой статье мы рассмотрим каждый из способов более подробно и проанализируем, как вставлять определенные поля, используя эти опции.
Вставка полей в документ с помощью DocumentBuilder
В Aspose.Words метод insert_field используется для вставки новых полей в документ. Первый параметр принимает полный код поля, которое необходимо вставить. Второй параметр является необязательным и позволяет вручную задать результат заполнения поля. Если это значение не указано, поле обновляется автоматически. Вы можете задать значение null или empty в этом параметре, чтобы вставить поле с пустым значением. Если вы не уверены в синтаксисе конкретного кода поля, сначала создайте поле в Microsoft Word и переключитесь на просмотр его кода.
В следующем примере кода показано, как вставить поле слияния в документ с помощью DocumentBuilder:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
builder.insert_field("MERGEFIELD MyFieldName \* MERGEFORMAT") | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_field.docx") |
В следующем примере кода показано, как вставить поле слияния с немецким языковым стандартом в документ, используя DocumentBuilder:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
# Insert content with German locale. | |
builder.font.locale_id = 1031 | |
builder.insert_field("MERGEFIELD Date1 \\@ \"dddd, d MMMM yyyy\"") | |
builder.write(" - ") | |
builder.insert_field("MERGEFIELD Date2 \\@ \"dddd, d MMMM yyyy\"") |
Тот же метод используется для вставки полей, вложенных в другие поля.
В следующем примере кода показано, как вставить поля, вложенные в другое поле, используя DocumentBuilder:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
for i in range(0, 5) : | |
builder.insert_break(aw.BreakType.PAGE_BREAK) | |
builder.move_to_header_footer(aw.HeaderFooterType.FOOTER_PRIMARY) | |
# We want to insert a field like this: | |
# IF PAGE <> NUMPAGES "See Next Page" "Last Page" | |
field = builder.insert_field("IF ") | |
builder.move_to(field.separator) | |
builder.insert_field("PAGE") | |
builder.write(" <> ") | |
builder.insert_field("NUMPAGES") | |
builder.write(" \"See Next Page\" \"Last Page\" ") | |
field.update() | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_nested_fields.docx") |
Укажите языковой стандарт на уровне поля
Идентификатор языка - это стандартное международное цифровое сокращение для обозначения языка в стране или географическом регионе. С помощью Aspose.Words вы можете указать языковой стандарт на уровне поля. Свойство locale_id возвращает или задает языковой стандарт ID поля.
В следующем примере кода показано, как использовать эту опцию:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
builder = aw.DocumentBuilder() | |
field = builder.insert_field(aw.fields.FieldType.FIELD_DATE, True) | |
field.locale_id = 1049 | |
builder.document.save(docs_base.artifacts_dir + "WorkingWithFields.specifylocale_at_fieldlevel.docx") |
Вставить Нетипизированное/пустое поле
Если вы хотите вставить нетипизированные/пустые поля ({}) так, как позволяет Microsoft Word, вы можете использовать метод insert_field с параметром FieldType.FIELD_NONE. Чтобы вставить поле в документ Word, вы можете нажать комбинацию клавиш “Ctrl + F9”.
В следующем примере кода показано, как вставить пустое поле в документ:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
field = builder.insert_field(aw.fields.FieldType.FIELD_NONE, False) | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_field_none.docx") |
Вставка полей в документ с помощью FieldBuilder
Альтернативным способом вставки полей в Aspose.Words является класс FieldBuilder. Он предоставляет удобный интерфейс для указания переключателей полей и значений аргументов в виде текста, узлов или даже вложенных полей.
В следующем примере кода показано, как вставить поле в документ с помощью FieldBuilder:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
# Prepare IF field with two nested MERGEFIELD fields: { IF "left expression" = "right expression" "Firstname: { MERGEFIELD firstname }" "Lastname: { MERGEFIELD lastname }"} | |
field_builder = aw.fields.FieldBuilder(aw.fields.FieldType.FIELD_IF) | |
field_builder.add_argument("left expression") | |
field_builder.add_argument("=") | |
field_builder.add_argument("right expression") | |
field_builder.add_argument( | |
aw.fields.FieldArgumentBuilder() | |
.add_text("Firstname: ") | |
.add_field(aw.fields.FieldBuilder(aw.fields.FieldType.FIELD_MERGE_FIELD).add_argument("firstname"))) | |
field_builder.add_argument( | |
aw.fields.FieldArgumentBuilder() | |
.add_text("Lastname: ") | |
.add_field(aw.fields.FieldBuilder(aw.fields.FieldType.FIELD_MERGE_FIELD).add_argument("lastname"))) | |
# Insert IF field in exact location | |
field = field_builder.build_and_insert(doc.first_section.body.first_paragraph) | |
field.update() | |
doc.save(ARTIFACTS_DIR + "Field.insert_field_using_field_builder.docx") |
Вставка полей с помощью DOM
Вы также можете вставлять поля различных типов, используя Aspose.Words Объектную модель документа (DOM). В этом разделе мы рассмотрим несколько примеров.
Вставка поля слияния в документ с помощью DOM
Поле MERGEFIELD
в документе Word может быть представлено классом FieldMergeField. Вы можете использовать класс FieldMergeField для выполнения следующих операций:
- укажите название поля для объединения
- укажите форматирование поля слияния
- укажите текст, который находится между разделителем полей и концом поля в поле объединения
- укажите текст, который будет вставлен после поля объединения, если это поле не является пустым
- укажите текст, который будет вставлен перед полем объединения, если это поле не является пустым
В следующем примере кода показано, как добавить поле Merge
с помощью DOM в абзац документа:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
para = doc.get_child_nodes(aw.NodeType.PARAGRAPH, True)[0].as_paragraph() | |
builder.move_to(para) | |
# We want to insert a merge field like this: | |
# " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" | |
field = builder.insert_field(aw.fields.FieldType.FIELD_MERGE_FIELD, False).as_field_merge_field() | |
# " MERGEFIELD Test1" | |
field.field_name = "Test1" | |
# " MERGEFIELD Test1 \\b Test2" | |
field.text_before = "Test2" | |
# " MERGEFIELD Test1 \\b Test2 \\f Test3 | |
field.text_after = "Test3" | |
# " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m" | |
field.is_mapped = True | |
# " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" | |
field.is_vertical_formatting = True | |
field.update() | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_merge_field_using_dom.docx") |
Вставка поля Mail Merge ADDRESSBLOCK
в документ с помощью DOM
Поле ADDRESSBLOCK
используется для вставки адресного блока Mail Merge в документ Word. Поле ADDRESSBLOCK
в документе Word может быть представлено классом FieldAddressBlock. Вы можете использовать класс FieldAddressBlock для выполнения следующих операций:
- укажите, следует ли указывать название страны/региона в этом поле
- укажите, следует ли форматировать адрес в соответствии со страной/регионом получателя, как указано в POST*CODE (Всемирный почтовый союз, 2006)
- укажите название исключенной страны/региона
- укажите формат имени и адреса
- укажите язык ID, используемый для форматирования адреса
В следующем примере кода показано, как добавить поле Mail Merge ADDRESSBLOCK
с помощью DOM в абзац документа:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
para = doc.get_child_nodes(aw.NodeType.PARAGRAPH, True)[0].as_paragraph() | |
builder.move_to(para) | |
# We want to insert a mail merge address block like this: | |
# ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" | |
field = builder.insert_field(aw.fields.FieldType.FIELD_ADDRESS_BLOCK, False).as_field_address_block() | |
# ADDRESSBLOCK \\c 1" | |
field.include_country_or_region_name = "1" | |
# ADDRESSBLOCK \\c 1 \\d" | |
field.format_address_on_country_or_region = True | |
# ADDRESSBLOCK \\c 1 \\d \\e Test2 | |
field.excluded_country_or_region_name = "Test2" | |
# ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 | |
field.name_and_address_format = "Test3" | |
# ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" | |
field.language_id = "Test 4" | |
field.update() | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_mail_merge_address_block_field_using_dom.docx") |
Вставка поля ADVANCE
в документ без использования DocumentBuilder
Поле ADVANCE
используется для смещения последующего текста в строке влево, вправо, вверх или вниз. Поле ADVANCE
в документе Word может быть представлено классом FieldAdvance. Класс FieldAdvance можно использовать для выполнения следующих операций:
- укажите количество точек, на которые текст, следующий за полем, должен быть перемещен по вертикали от верхнего края страницы
- укажите количество точек, на которое текст, следующий за полем, должен быть перемещен по горизонтали от левого края столбца, рамки или текстового поля
- укажите количество точек, на которые текст, следующий за полем, должен быть перемещен влево, вправо, вверх или вниз
В следующем примере кода показано, как добавить поле ADVANCE
с помощью DOM в абзац документа.
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
para = doc.get_child_nodes(aw.NodeType.PARAGRAPH, True)[0].as_paragraph() | |
# We want to insert an Advance field like this: | |
# ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 | |
field = para.append_field(aw.fields.FieldType.FIELD_ADVANCE, False).as_field_advance() | |
# ADVANCE \\d 10 " | |
field.down_offset = "10" | |
# ADVANCE \\d 10 \\l 10 | |
field.left_offset = "10" | |
# ADVANCE \\d 10 \\l 10 \\r -3.3 | |
field.right_offset = "-3.3" | |
# ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 | |
field.up_offset = "0" | |
# ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 | |
field.horizontal_position = "100" | |
# ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 | |
field.vertical_position = "100" | |
field.update() | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_advance_field_with_out_document_builder.docx") |
Вставка поля ASK
в документ без использования DocumentBuilder
Поле ASK
используется для запроса текста, который пользователь должен присвоить закладке в документе Word. Поле ASK
в документе Word может быть представлено классом FieldAsk. Класс FieldAsk можно использовать для выполнения следующих операций:
- укажите название закладки
- укажите ответ пользователя по умолчанию (начальное значение, содержащееся в окне запроса)
- укажите, должен ли ответ пользователя быть получен один раз за операцию Mail Merge
- укажите текст запроса (заголовок окна запроса)
В следующем примере кода показано, как добавить поле ASK
с помощью DOM в абзац документа:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
para = doc.get_child_nodes(aw.NodeType.PARAGRAPH, True)[0].as_paragraph() | |
# We want to insert an Ask field like this: | |
# ASK \"Test 1\" Test2 \\d Test3 \\o | |
field = para.append_field(aw.fields.FieldType.FIELD_ASK, False).as_field_ask() | |
# ASK \"Test 1\" " | |
field.bookmark_name = "Test 1" | |
# ASK \"Test 1\" Test2 | |
field.prompt_text = "Test2" | |
# ASK \"Test 1\" Test2 \\d Test3 | |
field.default_response = "Test3" | |
# ASK \"Test 1\" Test2 \\d Test3 \\o | |
field.prompt_once_on_mail_merge = True | |
field.update() | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_ask_field_with_out_document_builder.docx") |
Вставка поля AUTHOR
в документ без использования DocumentBuilder
Поле AUTHOR
используется для указания имени автора документа в свойствах Document
. Поле AUTHOR
в документе Word может быть представлено классом FieldAuthor. Класс FieldAuthor можно использовать для выполнения следующих операций:
- укажите имя автора документа
В следующем примере кода показано, как добавить поле AUTHOR
с помощью DOM в абзац документа:
Вставка поля INCLUDETEXT
в документ без использования DocumentBuilder
В поле INCLUDETEXT
вставляется текст и графические изображения, содержащиеся в документе, название которого указано в коде поля. Вы можете вставить весь документ или часть документа, на который ссылается закладка. Это поле в документе Word обозначается символом INCLUDETEXT. Вы можете использовать класс FieldIncludeText для выполнения следующих операций:
- укажите название закладки для включенного документа
- укажите местоположение документа
В следующем примере кода показано, как добавить поле INCLUDETEXT
с помощью DOM в абзац документа:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
para = aw.Paragraph(doc) | |
# We want to insert an INCLUDETEXT field like this: | |
# INCLUDETEXT "file path" | |
fieldIncludeText = para.append_field(aw.fields.FieldType.FIELD_INCLUDE_TEXT, False).as_field_include_text() | |
fieldIncludeText.bookmark_name = "bookmark" | |
fieldIncludeText.source_full_name = docs_base.my_dir + "IncludeText.docx" | |
doc.first_section.body.append_child(para) | |
fieldIncludeText.update() | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_include_field_without_document_builder.docx") |
Вставка поля TOA
в документ без использования DocumentBuilder
В поле TOA
(Table of Authorities) создается и вставляется таблица полномочий. В поле TOA
собираются записи, помеченные полями TA
(Table of Authorities Entry). Microsoft Office Word вставляет поле TOA
, когда вы нажимаете Insert Table of Authorities в группе Table of Authorities на вкладке References. При просмотре поля TOA
в вашем документе синтаксис будет выглядеть следующим образом:
{ TOA
[Switches ] }
Вы можете использовать класс FieldToa для выполнения операций с полем TOA
.
В следующем примере кода показано, как добавить поле TOA
с помощью DOM в абзац документа:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
para = aw.Paragraph(doc) | |
# We want to insert TA and TOA fields like this: | |
# TA \c 1 \l "Value 0" | |
# TOA \c 1 | |
fieldTA = para.append_field(aw.fields.FieldType.FIELD_TOAENTRY, False).as_field_ta() | |
fieldTA.entry_category = "1" | |
fieldTA.long_citation = "Value 0" | |
doc.first_section.body.append_child(para) | |
para = aw.Paragraph(doc) | |
fieldToa = para.append_field(aw.fields.FieldType.FIELD_TOA, False).as_field_toa() | |
fieldToa.entry_category = "1" | |
doc.first_section.body.append_child(para) | |
fieldToa.update() | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_toa_field_without_document_builder.docx") |