Werken met afdelingen

Soms wil je een document dat niet dezelfde opmaak heeft op alle pagina’s. Bijvoorbeeld, je kan nodig hebben om paginanummer formaten te wijzigen, hebben verschillende pagina grootte en oriëntatie, of hebben de eerste document pagina als een cover pagina zonder nummering. Je kunt dat bereiken met secties.

Secties zijn niveauknooppunten die headers en voetteksten, oriëntatie, kolommen, marges, paginanummeropmaak, en anderen controleren.

Aspose.Words Hiermee kunt u secties beheren, een document in secties verdelen en wijzigingen aanbrengen die alleen van toepassing zijn op een specifieke sectie. Aspose.Words slaat informatie op over sectieopmaak zoals headers en voetteksten, pagina-instellingen en kolominstellingen in de sectieafbreking.

Dit artikel legt uit hoe te werken met secties en sectie pauzes.

Wat Section en Section Break is

De afdelingen Documenten worden vertegenwoordigd door de Section en SectionCollection lessen. Sectie objecten zijn directe kinderen van de Document knooppunt en kan worden benaderd via de Sections eigendom. U kunt deze knooppunten beheren met behulp van een aantal methoden zoals Remove, Add, IndexOf, en anderen.

Sectie break is een optie die documentpagina’s verdeelt in secties met aanpasbare lay-outs.

Soorten sectiebreuk

Aspose.Words kunt u documenten splitsen en formatteren met behulp van verschillende sectie pauzes van de BreakType Lijst:

  • SectionBreakContinuous
  • SectionBreakNewColumn
  • SectionBreakNewPage
  • SectionBreakEvenPage
  • SectionBreakOddPage

U kunt ook de SectionStart Lijst om een breektype te kiezen dat alleen geldt voor de eerste sectie zoals NewColumn, NewPage, EvenPage en OddPage.

Een sectie beheren

Aangezien een sectie is een normale samengestelde knooppunt, de hele node manipulatie API kan worden gebruikt om secties te manipuleren: toe te voegen, verwijderen en andere bewerkingen op secties. U kunt meer lezen over nodes in het artikel Aspose.Words Document Object Model (DOM).

Aan de andere kant kunt u ook gebruik maken van de DocumentBuilder API werken met secties. In dit artikel zullen we ons richten op deze specifieke manier van werken met secties.

Een sectiepauze invoegen of verwijderen

Aspose.Words kunt u een sectie in te breken in tekst met behulp van de InsertBreak methode.

Het volgende voorbeeld van code laat zien hoe een sectie in een document kan worden ingebroken:

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

Gebruik de Remove methode om een sectiebreuk te verwijderen. Als u niet hoeft te verwijderen een specifieke sectie te breken en in plaats daarvan de inhoud van die sectie te verwijderen, kunt u de ClearContent methode.

Het volgende voorbeeld van code laat zien hoe secties pauzes verwijderen:

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

Deel verplaatsen

Als je een sectie wilt verplaatsen van de ene positie naar de andere in je document, moet je de index van die sectie krijgen. Aspose.Words kunt u een sectie positie van een SectionCollection. U kunt de Sections eigendom om alle secties in uw document te krijgen. Maar als u alleen de eerste sectie wilt krijgen, kunt u de FirstSection eigendom.

Het volgende voorbeeld van code laat zien hoe u de eerste sectie kunt openen en itereren via de kinderen van een samengesteld knooppunt:

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

Specificeer een sectieindeling

Soms wil je dat je document er beter uitziet door creatieve lay-outs te maken voor verschillende documentsecties. Als u het type van het huidige sectieraster wilt opgeven, kunt u een sectieopmaakmodus kiezen met behulp van de SectionLayoutMode Lijst:

  • Standaard
  • Raster
  • LineGrid
  • SnapToChars

Het volgende codevoorbeeld laat zien hoe het aantal regels dat elke pagina kan hebben te beperken:

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

Een sectie bewerken

Wanneer u een nieuwe sectie aan uw document toevoegt, zal er geen lichaam of paragraaf zijn die u kunt bewerken. Aspose.Words kunt u garanderen dat een sectie bevat een lichaam met ten minste een paragraaf met behulp van de EnsureMinimum method

Het volgende voorbeeld van code laat zien hoe een nieuwe sectie knooppunt te bereiden met behulp van 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!"))

Inhoud toevoegen of prepend

Als u een vorm wilt tekenen of tekst of afbeelding wilt toevoegen aan het begin/einde van een sectie, kunt u de AppendContent en PrependContent methoden van de Section Klasse.

Het volgende voorbeeld van code laat zien hoe inhoud van een bestaande sectie kan worden toegevoegd:

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

Kloon een sectie

Aspose.Words kunt u een sectie dupliceren door een volledige kopie van het met behulp van de Clone methode.

Het volgende voorbeeld van code laat zien hoe je de eerste sectie in je document kunt klonen:

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

Delen tussen documenten kopiëren

In sommige gevallen kunt u grote documenten met vele secties hebben en u wilt de inhoud van een sectie van het ene document naar het andere kopiëren.

Aspose.Words kunt u delen tussen documenten kopiëren met behulp van de ImportNode methode.

Het volgende voorbeeld van de code laat zien hoe u secties tussen documenten kunt kopiëren:

# 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

Werken met sectie kop en voettekst

De basisregels voor het weergeven van een header of voettekst voor elke sectie zijn vrij eenvoudig:

  1. Als de sectie geen eigen headers/voeters van een bepaald type heeft, dan wordt deze genomen uit de vorige sectie.
  2. Het type header/voeter dat op de pagina wordt weergegeven wordt bestuurd door de “Different First Page” en “Different Odd & Even pages” sectieinstellingen als ze uitgeschakeld zijn, dan worden de eigen titels van de sectie genegeerd.

Het volgende code voorbeeld laat zien hoe 2 secties met verschillende headers te maken:

Als u de tekst van headers en voetteksten wilt verwijderen zonder te verwijderen HeaderFooter objecten in uw document, kunt u de ClearHeadersFooters methode. Daarnaast kunt u de DeleteHeaderFooterShapes methode om alle vormen uit headers en voetteksten in uw document te verwijderen.

Het volgende voorbeeld van code laat zien hoe inhoud van alle headers en voetteksten in een sectie te wissen:

Het volgende codevoorbeeld hoe alle vormen uit alle headers voetteksten in een sectie te verwijderen:

Paginaeigenschappen aanpassen in een sectie

Voordat u een pagina of document afdrukt, kunt u de grootte en lay-out van een enkele pagina of het hele document aanpassen. Met pagina-instellingen kunt u de instellingen van documentpagina’s wijzigen, zoals marges, oriëntatie en grootte voor het afdrukken van verschillende eerste pagina’s of oneven pagina’s.

Aspose.Words kunt u pagina en sectie eigenschappen aanpassen met behulp van de PageSetup Klasse.

Het volgende voorbeeld van code laat zien hoe u eigenschappen zoals paginagrootte en oriëntatie voor de huidige sectie kunt instellen:

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

Het volgende code voorbeeld laat zien hoe de pagina eigenschappen in alle secties te wijzigen:

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

Zie ook