Lucrul cu secțiuni

Uneori doriți un document care nu are aceeași formatare pe toate paginile. De exemplu, poate fi necesar să modificați formatele numărului de pagină, să aveți dimensiuni și orientări diferite ale paginii sau să aveți prima pagină a documentului ca pagină de copertă fără nicio numerotare. Puteți realiza acest lucru cu secțiuni.

Secțiunile sunt noduri de nivel care controlează anteturile și subsolurile, orientarea, coloanele, marginile, formatarea numărului de pagină și altele.

Aspose.Words vă permite să gestionați secțiuni, să împărțiți un document în secțiuni și să efectuați modificări de formatare care se aplică numai unei anumite secțiuni. Aspose.Words stochează informații despre formatarea secțiunii, cum ar fi anteturile și subsolurile, configurarea paginii și setările coloanei în pauza de secțiune.

Acest articol explică cum să lucrați cu secțiuni și pauze de secțiune.

Ce secțiune și pauză de secțiune este

Secțiunile documentului sunt reprezentate de clasele Section și SectionCollection. Obiectele secțiunii sunt copii imediati ai nodului Document și pot fi accesate prin proprietatea Sections. Puteți gestiona aceste noduri utilizând unele metode, cum ar fi Remove, Add, IndexOf, și altele.

Pauza de secțiune este o opțiune care împarte paginile documentelor în secțiuni cu machete personalizabile.

Tipuri de pauză de secțiune

Aspose.Words vă permite să împărțiți și să formatați documente folosind diferite pauze de secțiune ale enumerării BreakType:

  • SectionBreakContinuous
  • SectionBreakNewColumn
  • SectionBreakNewPage
  • SectionBreakEvenPage
  • SectionBreakOddPage

De asemenea, puteți utiliza enumerarea SectionStart pentru a alege un tip de pauză care se aplică numai pentru prima secțiune, cum ar fi NewColumn, NewPage, EvenPage, și OddPage.

Gestionarea unei secțiuni

Deoarece o secțiune este un nod compus normal, întreaga manipulare a nodului API poate fi utilizată pentru a manipula secțiuni: pentru a adăuga, elimina și alte operații pe secțiuni. Puteți citi mai multe despre noduri în articol Aspose.Words Model Obiect Document (DOM).

Pe de altă parte, puteți utiliza și DocumentBuilder API pentru a lucra cu secțiuni. În acest articol, ne vom concentra asupra acestui mod special de a lucra cu secțiuni.

Introduceți sau eliminați o pauză de secțiune

Aspose.Words vă permite să inserați o pauză de secțiune în text folosind metoda InsertBreak.

Următorul exemplu de cod arată cum să inserați o pauză de secțiune într-un document:

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

Utilizați metoda Remove pentru a șterge o pauză de secțiune. Dacă nu este necesar să eliminați o anumită pauză de secțiune și, în schimb, să ștergeți conținutul acelei secțiuni, puteți utiliza metoda ClearContent.

Următorul exemplu de cod arată cum să eliminați pauzele de secțiuni:

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

Mutați o secțiune

Dacă doriți să mutați o secțiune dintr-o poziție în alta în documentul dvs., trebuie să obțineți indexul acelei secțiuni. Aspose.Words vă permite să obțineți o poziție secțiune de la un SectionCollection. Puteți utiliza proprietatea Sections pentru a obține toate secțiunile din documentul dvs. Dar dacă doriți să obțineți doar prima secțiune, puteți utiliza proprietatea FirstSection.

Următorul exemplu de cod arată cum să accesați prima secțiune și să iterați prin copiii unui nod compus:

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

Specificați un aspect de secțiune

Uneori doriți ca documentul dvs. să arate mai bine făcând machete creative pentru diferite secțiuni de documente. Dacă doriți să specificați tipul grilei de secțiuni curente, puteți alege un mod de aspect al secțiunii utilizând enumerarea SectionLayoutMode:

  • Implicit
  • Rețea
  • LineGrid
  • SnapToChars

Următorul exemplu de cod arată cum să limitați numărul de linii pe care le poate avea fiecare pagină:

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

Editarea unei secțiuni

Când adăugați o nouă secțiune la documentul dvs., nu va exista niciun corp sau paragraf pe care să îl puteți edita. Aspose.Words vă permite să garantați că o secțiune conține un corp cu cel puțin un paragraf folosind metoda EnsureMinimum – va adăuga automat un corp (sau HeaderFooter) nod la document și apoi va adăuga un paragraf la acesta.

Următorul exemplu de cod arată cum să pregătiți un nou nod de secțiune folosind 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!"))

Adăugați sau Prepend conținut

Dacă doriți să desenați o formă sau să adăugați text sau imagine la începutul/sfârșitul unei secțiuni, puteți utiliza metodele AppendContent și PrependContent ale clasei Section.

Următorul exemplu de cod arată cum să adăugați conținutul unei secțiuni existente:

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

Clonează o secțiune

Aspose.Words vă permite să duplicați o secțiune creând o copie completă a acesteia folosind metoda Clone.

Următorul exemplu de cod arată cum să clonați prima secțiune din document:

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

Copiați secțiuni între documente

În unele cazuri, este posibil să aveți documente mari cu multe secțiuni și doriți să copiați conținutul unei secțiuni dintr-un document în altul.

Aspose.Words vă permite să copiați secțiuni între documente folosind metoda ImportNode.

Următorul exemplu de cod arată cum să copiați secțiuni între documente:

# 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

Lucrați cu antetul și subsolul secțiunii

Regulile de bază pentru afișarea unui antet sau subsol pentru fiecare secțiune sunt destul de simple:

  1. Dacă Secțiunea nu are propriile anteturi/subsoluri de un anumit tip, atunci este preluată din secțiunea anterioară.
  2. Tipul de antet / subsol afișat pe pagină este controlat de setările secțiunii “Different First Page” și “Different Odd & Even pages” – dacă sunt dezactivate, atunci titlurile proprii ale secțiunii sunt ignorate.

Următorul exemplu de cod arată cum să creați 2 secțiuni cu anteturi diferite:

Dacă doriți să eliminați textul anteturilor și subsolurilor fără a elimina obiectele HeaderFooter din documentul dvs., puteți utiliza metoda ClearHeadersFooters. În plus, puteți utiliza metoda DeleteHeaderFooterShapes pentru a elimina toate formele din anteturi și subsoluri din documentul dvs.

Următorul exemplu de cod arată cum să ștergeți conținutul tuturor anteturilor și subsolurilor dintr-o secțiune:

Următorul exemplu de cod cum să eliminați toate formele din toate anteturile subsoluri într-o secțiune:

Personalizați proprietățile paginii într-o secțiune

Înainte de a imprima o pagină sau un document, poate doriți să personalizați și să modificați dimensiunea și aspectul unei singure pagini sau al întregului document. Cu page setup, puteți modifica setările paginilor de documente, cum ar fi marginile, orientarea și dimensiunea pentru imprimarea diferitelor prime pagini sau pagini impare.

Aspose.Words vă permite să personalizați proprietățile paginii și secțiunii Folosind clasa PageSetup.

Următorul exemplu de cod arată cum să setați proprietăți precum dimensiunea paginii și orientarea pentru secțiunea curentă:

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

Următorul exemplu de cod arată cum să modificați proprietățile paginii în toate secțiunile:

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

Vezi Și