Работа с раздели

Понякога искате документ, който няма един и същ формат във всички страници. Например, може да се наложи да промените форматите на номера на страниците, да имате различен размер и ориентация на страниците, или да имате първата страница на документа като страница за корицата без номерация. Можете да постигнете това с секции.

Раздели са нива възли, които контролират заглавни части и подножици, ориентация, колони, маржове, форматиране на страница номер и други.

Aspose.Words ви позволява да управлявате секции, да разделяте документ на раздели и да правите промени във форматирането, които се прилагат само към определен раздел. Aspose.Words съхранява информация за раздел форматиране като заглавни части и подметки, настройка на страница, и настройките на колона в раздел пробив.

Тази статия обяснява как да работите с раздели и раздели прекъсвания.

Какво е раздел и раздел почивка е

Разделите на документите са представени от Section както и SectionCollection Класове. Обекти на раздел са незабавни деца на Document Възел и може да бъде достъпен чрез Sections собственост. Можете да управлявате тези възли, като използвате някои методи като Remove, Add, IndexOf, и други.

Пробив на раздел е опция, която разделя страниците на документи в раздели с персонализирани оформление.

Видове прекъсване на раздел

Aspose.Words позволява да разделите и форматирате документи с помощта на различни прекъсвания на раздел BreakType Изброяване:

  • SpartageBreakContinulous
  • SectionBreakNewColumn
  • SectionBreakNewPage
  • Раздел BreakEvenPage
  • SectionBreakOddPage

Можете също така да използвате SectionStart изброяване за избор на вид пробив, който се прилага само за първия раздел като NewColumn, NewPage, EvenPage и OddPage.

Управление на раздел

Тъй като секцията е нормален композитен възел, цялата манипулация на възела API може да се използва за манипулиране на секции: за добавяне, премахване и други операции на секции. Можете да прочетете повече за възлите в статията Aspose.Words Document Object Model (DOM).

От друга страна, можете да използвате DocumentBuilder API да работя с секции. В тази статия ще се съсредоточим върху този конкретен начин на работа с разделите.

Вмъкване или премахване на прекъсване на раздел

Aspose.Words позволява да вмъкнете раздел за прекъсване на текста с помощта на InsertBreak метод.

Следният пример с код показва как да се вмъкне раздел, който да пробие в документ:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
def test_insert_section_breaks(self):
doc = aw.Document(MY_DIR + "Footnotes and endnotes.docx")
builder = aw.DocumentBuilder(doc)
paras = [para.as_paragraph() for para in doc.get_child_nodes(aw.NodeType.PARAGRAPH, True)]
topic_start_paras = []
for para in paras:
style = para.paragraph_format.style_identifier
if style == aw.StyleIdentifier.HEADING1:
topic_start_paras.append(para)
for para in topic_start_paras:
section = para.parent_section
# Insert section break if the paragraph is not at the beginning of a section already.
if para != section.body.first_paragraph:
builder.move_to(para.first_child)
builder.insert_break(aw.BreakType.SECTION_BREAK_NEW_PAGE)
# This is the paragraph that was inserted at the end of the now old section.
# We don't really need the extra paragraph, we just needed the section.
section.body.last_paragraph.remove()

Използвайте Remove метод за изтриване на прекъсване на раздел. Ако не е необходимо да премахнете конкретен раздел пробив и вместо това изтрийте съдържанието на този раздел, можете да използвате ClearContent метод.

Следният пример за код показва как се премахват разделите:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
@staticmethod
def remove_section_breaks(doc: aw.Document):
# Loop through all sections starting from the section that precedes the last one and moving to the first section.
for i in range(doc.sections.count - 2, -1):
# Copy the content of the current section to the beginning of the last section.
doc.last_section.prepend_content(doc.sections[i])
# Remove the copied section.
doc.sections[i].remove()

Преместване на раздел

Ако искате да преместите раздел от една позиция в друга във вашия документ, трябва да получите индекса на този раздел. Aspose.Words ви позволява да получите позиция раздел от а SectionCollection. Можеш да използваш Sections собственост, за да получите всички раздели в документа си. Но ако искате да получите само първата част, можете да използвате FirstSection собственост.

Следният пример за код показва как да се влезе в първата секция и да се итерат през децата на композитен възел:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.write("Section 1")
builder.move_to_header_footer(aw.HeaderFooterType.HEADER_PRIMARY)
builder.write("Primary header")
builder.move_to_header_footer(aw.HeaderFooterType.FOOTER_PRIMARY)
builder.write("Primary footer")
section = doc.first_section
# A Section is a composite node and can contain child nodes,
# but only if those child nodes are of a "Body" or "HeaderFooter" node type.
for node in section.get_child_nodes(aw.NodeType.ANY, False):
if node.node_type == aw.NodeType.BODY:
body = node.as_body()
print("Body:")
print(f"\t\"{body.get_text().strip()}\"")
if node.node_type == aw.NodeType.HEADER_FOOTER:
header_footer = node.as_header_footer()
print(f"HeaderFooter type: {header_footer.header_footer_type};")
print(f"\t\"{header_footer.get_text().strip()}\"")

Посочете подреждане на раздел

Понякога искате документът ви да изглежда по-добре, като направите творчески макети за различни раздели от документи. Ако искате да посочите вида на текущата мрежа на раздел, можете да изберете режим на оформление на раздел с помощта на SectionLayoutMode Изброяване:

  • По подразбиране
  • Мрежа
  • LineGrid
  • SnapToChars

Следният пример за код показва как да се ограничи броят на редовете, които всяка страница може да има:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
# Enable pitching, and then use it to set the number of lines per page in this section.
# A large enough font size will push some lines down onto the next page to avoid overlapping characters.
builder.page_setup.layout_mode = aw.SectionLayoutMode.LINE_GRID
builder.page_setup.lines_per_page = 15
builder.paragraph_format.snap_to_grid = True
for i in range(30):
builder.write(
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ")
doc.save(ARTIFACTS_DIR + "WorkingWithDocumentOptionsAndSettings.line_grid_section_layout_mode.docx")

Редактиране на раздел

Когато добавите нов раздел към вашия документ, няма да има тяло или параграф, който можете да редактирате. Aspose.Words ви позволява да гарантирате, че даден раздел съдържа орган с най-малко един параграф, като използвате EnsureMinimum метод го добавя автоматично Body (или HeaderFooter) възел към документа и след това добавя § към него.

Следният пример за код показва как да се подготви нов възел раздел използване EnsureMinimum:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document()
# If we add a new section like this, it will not have a body, or any other child nodes.
doc.sections.add(aw.Section(doc))
# Run the "EnsureMinimum" method to add a body and a paragraph to this section to begin editing it.
doc.last_section.ensure_minimum()
doc.sections[0].body.first_paragraph.append_child(aw.Run(doc, "Hello world!"))

Добавяне или предварително използване на съдържание

Ако искате да начертаете някаква форма или да добавите текст или изображение в началото/ края на раздел, можете да използвате AppendContent както и PrependContent методи на Section Клас.

Следният пример за код показва как да се добави съдържание в съществуващ раздел:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.write("Section 1")
builder.insert_break(aw.BreakType.SECTION_BREAK_NEW_PAGE)
builder.write("Section 2")
builder.insert_break(aw.BreakType.SECTION_BREAK_NEW_PAGE)
builder.write("Section 3")
section = doc.sections[2]
# Insert the contents of the first section to the beginning of the third section.
section_to_prepend = doc.sections[0]
section.prepend_content(section_to_prepend)
# Insert the contents of the second section to the end of the third section.
section_to_append = doc.sections[1]
section.append_content(section_to_append)

Клониране на раздел

Aspose.Words ви позволява да дублирате раздел чрез създаване на пълно копие от него с помощта на Clone метод.

Следният пример за код показва как да клонирате първия раздел във вашия документ:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document(MY_DIR + "Document.docx")
clone_section = doc.sections[0].clone()

Копиране на раздели между документи

В някои случаи може да имате големи документи с много раздели и искате да копирате съдържанието на раздел от един документ в друг.

Aspose.Words позволява да копирате раздели между документи, използвайки ImportNode метод.

Следният пример за код показва как да копирате раздели между документи:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
src_doc = aw.Document(MY_DIR + "Document.docx")
dst_doc = aw.Document()
source_section = src_doc.sections[0]
new_section = dst_doc.import_node(source_section, True).as_section()
dst_doc.sections.add(new_section)
dst_doc.save(ARTIFACTS_DIR + "WorkingWithSection.copy_section.docx")
view raw copy-section.py hosted with ❤ by GitHub

Основните правила за показване на заглавна част или стъпало за всеки раздел са доста прости:

  1. Ако секцията няма собствени заглавни части/футови части от определен тип, тогава тя се взема от предишния раздел.
  2. Видът на заглавната част/футъра, показан на страницата, се контролира от “Различните първа страница” и “Различните страници на Odd & Even” в раздел.

Следният пример за код показва как да се създадат 2 секции с различни заглавни части:

Ако искате да премахнете текста на заглавните части и подметките, без да премахвате HeaderFooter обекти в документа, можете да използвате ClearHeadersFooters метод. В допълнение, можете да използвате DeleteHeaderFooterShapes метод за премахване на всички форми от заглавните части и подметките във вашия документ.

Следният пример за код показва как да изчистите съдържанието на всички заглавни части и подметки в раздел:

Следният пример за код как да премахнете всички форми от всички заглавни ленти в раздел:

Настройки на страницата в раздел

Преди да отпечатате страница или документ, може да искате да персонализирате и модифицирате размера и оформлението на една страница или целия документ. С настройката на страницата можете да промените настройките на страниците с документи като полета, ориентация и размер за отпечатване на различни първи страници или нечетни страници.

Aspose.Words позволява да персонализирате свойствата на страницата и секцията с помощта на PageSetup Клас.

Следният пример за код показва как да зададете такива свойства като размер на страница и ориентация за текущата секция:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.page_setup.orientation = aw.Orientation.LANDSCAPE
builder.page_setup.left_margin = 50
builder.page_setup.paper_size = aw.PaperSize.PAPER_10X14
doc.save(ARTIFACTS_DIR + "WorkingWithDocumentOptionsAndSettings.page_setup_and_section_formatting.docx")

Следният пример за код показва как да се променят свойствата на страницата във всички раздели:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.writeln("Section 1")
doc.append_child(aw.Section(doc))
builder.writeln("Section 2")
doc.append_child(aw.Section(doc))
builder.writeln("Section 3")
doc.append_child(aw.Section(doc))
builder.writeln("Section 4")
# It is important to understand that a document can contain many sections,
# and each section has its page setup. In this case, we want to modify them all.
for child in doc:
child.as_section().page_setup.paper_size = aw.PaperSize.LETTER
doc.save(ARTIFACTS_DIR + "WorkingWithSection.modify_page_setup_in_all_sections.doc")

Вижте също