Spolupráce se sekcemi

Někdy chcete dokument, který nemá stejný formátování na všech stránkách. Například budete muset upravit formáty čísel stránek, mít jinou velikost stránky a orientaci nebo mít první stránku dokumentu jako titulní stránku bez číslování. Toho můžete dosáhnout pomocí sekcí.

Sekce jsou rovné uzly, které ovládají hlavičky a zápatí, orientaci, sloupce, okraje, formátování čísel stránek a další.

Aspose.Words umožňuje spravovat sekce, rozdělit dokument do sekcí a formátovat změny, které se vztahují pouze na konkrétní oddíl. Aspose.Words ukládá informace o formátování sekcí, jako jsou hlavičky a zápatí, nastavení stránek a nastavení sloupců v sekci přestávky.

Tento článek vysvětluje, jak pracovat s úseky a přestávkami.

Co je sekce a sekce přestávka

Sekce dokumentů jsou zastoupeny Section a SectionCollection třídy. Sekce objekty jsou okamžité děti Document Uzel a lze k němu přistupovat přes Sections majetek. Můžete spravovat tyto uzly pomocí některých metod, jako je Remove, Add, IndexOf, a další.

Přestávka sekce je volba, která rozděluje stránky dokumentů do sekcí s přizpůsobitelným uspořádáním.

Typy přerušení úseku

Aspose.Words umožňuje rozdělit a formátovat dokumenty pomocí různých částí přestávky BreakType číslice:

  • Sekce BreakContinous
  • SectionBreakNewColumn
  • SekceBreakNewPage
  • SekceBreakEvenPage
  • SekceBreakOddPage

Můžete také použít SectionStart počet pro výběr typu přestávky, který platí pouze pro první část jako NewColumn, NewPage, EvenPage a OddPage.

Správa sekce

Vzhledem k tomu, sekce je normální kompozitní uzel, celá manipulace s uzly API lze použít pro manipulaci s úseky: pro přidání, odstranění a jiné operace na sekcích. Více o uzlech si můžete přečíst v článku Aspose.Words Document Object Model (DOM).

Na druhou stranu, můžete také použít DocumentBuilder API pracovat s sekcemi. V tomto článku se zaměříme na tento konkrétní způsob práce s oddíly.

Vložit nebo odstranit zlomovou část

Aspose.Words umožňuje vložit sekci vloupání do textu pomocí InsertBreak metoda.

Následující příklad kódu ukazuje, jak vložit oddíl vloupání do dokumentu:

# 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()

Použijte Remove způsob odstranění přestávky v sekci. Pokud nepotřebujete odstranit určitou část přestávky a místo toho smazat obsah této sekce, můžete použít ClearContent metoda.

Následující příklad kódu ukazuje, jak odstranit části přestávky:

# 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()

Přesunout část

Pokud chcete přesunout část z jedné pozice do druhé ve vašem dokumentu, musíte získat index této sekce. Aspose.Words umožňuje získat pozici sekce z SectionCollection. Můžete použít Sections vlastnost pro získání všech částí ve vašem dokumentu. Ale pokud chcete získat pouze první část, můžete použít FirstSection majetek.

Následující příklad kódu ukazuje, jak se dostat do první sekce a iterovat prostřednictvím dětí kompozitního uzlu:

# 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()}\"")

Upřesnit uspořádání oddílu

Někdy chcete, aby váš dokument vypadal lépe tím, že tvůrčí uspořádání pro různé sekce dokumentů. Chcete-li zadat typ sítě aktuální sekce, můžete zvolit režim rozložení sekce pomocí SectionLayoutMode číslice:

  • Výchozí
  • Grid
  • LineGrid
  • SnapToChars

Následující příklad kódu ukazuje, jak omezit počet řádků, které každá stránka může mít:

# 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")

Upravit část

Při přidání nové sekce do dokumentu nebude žádné tělo ani odstavec, který můžete upravit. Aspose.Words umožňuje zaručit, že část obsahuje tělo s alespoň jedním odstavcem pomocí EnsureMinimum metoda

Následující příklad kódu ukazuje, jak připravit nový uzel sekce pomocí 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!"))

Přidávat nebo prepend obsah

Pokud chcete na začátku/konci sekce nakreslit nějaký tvar nebo přidat text nebo obrázek, můžete použít AppendContent a PrependContent metody Section třída.

Následující příklad kódu ukazuje, jak přidat obsah stávající sekce:

# 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)

Klonovat sekce

Aspose.Words umožňuje duplikovat sekci vytvořením celé kopie ní pomocí Clone metoda.

Následující příklad kódu ukazuje, jak naklonovat první oddíl ve vašem dokumentu:

# 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()

Kopírovat oddíly mezi dokumenty

V některých případech můžete mít velké dokumenty s mnoha oddíly a chcete zkopírovat obsah části z jednoho dokumentu do druhého.

Aspose.Words umožňuje kopírovat sekce mezi dokumenty pomocí ImportNode metoda.

Následující příklad kódu ukazuje, jak kopírovat oddíly mezi dokumenty:

# 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

Práce s hlavičkou sekce a zápatí

Základní pravidla pro zobrazení hlavičky nebo zápatí pro každou část jsou jednoduchá:

  1. Pokud část nemá vlastní hlavičky/nohy určitého typu, pak je převzata z předchozí části.
  2. Typ hlavičky/noha zobrazená na stránce je řízen “Odlišnou první stránku” a “Odlišné stránky a dokonce i jiné stránky” nastavení sekce “A” pokud jsou zakázány, pak jsou ignorovány vlastní tituly sekce.

Následující příklad kódu ukazuje, jak vytvořit 2 sekce s různými hlavičkami:

Pokud chcete odstranit text hlaviček a zápatí bez odstranění HeaderFooter objekty ve vašem dokumentu, můžete použít ClearHeadersFooters metoda. Kromě toho můžete použít DeleteHeaderFooterShapes způsob odstranění všech tvarů z hlaviček a zápatí ve vašem dokumentu.

Následující příklad kódu ukazuje, jak odstranit obsah všech hlaviček a zápatí v sekci:

Následující příklad kódu, jak odstranit všechny tvary ze všech zápatí hlaviček v sekci:

Přizpůsobit vlastnosti stránky v sekci

Před tiskem stránky nebo dokumentu si možná budete chtít přizpůsobit a upravit velikost a uspořádání jedné stránky nebo celého dokumentu. S nastavením stránky můžete změnit nastavení stránek dokumentů, jako jsou okraje, orientace a velikost pro tisk různých prvních stránek nebo lichých stránek.

Aspose.Words umožňuje přizpůsobit vlastnosti stránky a sekce pomocí PageSetup třída.

Následující příklad kódu ukazuje, jak nastavit takové vlastnosti jako velikost stránky a orientaci pro aktuální sekci:

# 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")

Následující příklad kódu ukazuje, jak upravit vlastnosti stránky ve všech sekcích:

# 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")

Viz také