Bölümlerle Çalışmak

Bazen tüm sayfalarda aynı biçimlendirmeye sahip olmayan bir belge istersiniz. Örneğin, sayfa numarası formatlarını değiştirmeniz, farklı sayfa boyutu ve yönüne sahip olmanız veya ilk belge sayfasını numaralandırma olmadan kapak sayfası olarak kullanmanız gerekebilir. Bunu bölümlerle başarabilirsiniz.

Bölümler, üstbilgileri ve altbilgileri, yönlendirmeyi, sütunları, kenar boşluklarını, sayfa numarası biçimlendirmesini ve diğerlerini kontrol eden düzey düğümleridir.

Aspose.Words, bölümleri yönetmenize, bir belgeyi bölümlere ayırmanıza ve yalnızca belirli bir bölüm için geçerli olan biçimlendirme değişiklikleri yapmanıza olanak tanır. Aspose.Words, üstbilgiler ve altbilgiler, sayfa düzeni ve sütun ayarları gibi bölüm biçimlendirmesi hakkındaki bilgileri bölüm sonunda saklar.

Bu makalede bölümler ve bölüm sonlarıyla nasıl çalışılacağı açıklanmaktadır.

Bölüm ve Bölüm Sonu Nedir?

Belge bölümleri Section ve SectionCollection sınıflarıyla temsil edilir. Bölüm nesneleri, Document düğümünün doğrudan alt öğeleridir ve bunlara Sections özelliği aracılığıyla erişilebilir. Bu düğümleri Remove, Add, IndexOf ve diğerleri gibi bazı yöntemleri kullanarak yönetebilirsiniz.

Bölüm sonu, belge sayfalarını özelleştirilebilir düzenlerle bölümlere ayıran bir seçenektir.

Bölüm Sonu Türleri

Aspose.Words, BreakType numaralandırmasının farklı bölüm sonlarını kullanarak belgeleri bölmenize ve biçimlendirmenize olanak tanır:

  • BölümBreakSürekli
  • BölümBreakNewColumn
  • BölümBreakNewPage
  • BölümBreakEvenPage
  • BölümBreakOddPage

NewColumn, NewPage, EvenPage ve OddPage gibi yalnızca ilk bölüm için geçerli olan bir kesme türü seçmek için SectionStart numaralandırmasını da kullanabilirsiniz.

Bir Bölümü Yönetme

Bir bölüm normal bir bileşik düğüm olduğundan, API düğüm manipülasyonunun tamamı bölümleri değiştirmek için kullanılabilir: bölümler eklemek, kaldırmak ve bölümler üzerindeki diğer işlemler için. Düğümler hakkında daha fazla bilgiyi Aspose.Words Document Object Model (DOM) makalesinde okuyabilirsiniz.

Öte yandan bölümlerle çalışmak için DocumentBuilder API’yi de kullanabilirsiniz. Bu makalede bölümlerle çalışmanın bu özel yoluna odaklanacağız.

Bölüm Sonu Ekleme veya Kaldırma

Aspose.Words, InsertBreak yöntemini kullanarak metne bölüm sonu eklemenizi sağlar.

Aşağıdaki kod örneği, bir belgeye bölüm sonunun nasıl ekleneceğini gösterir:

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

Bölüm sonunu silmek için Remove yöntemini kullanın. Belirli bir bölüm sonunu kaldırmanız gerekmiyor ve bunun yerine o bölümün içeriğini silmek istiyorsanız ClearContent yöntemini kullanabilirsiniz.

Aşağıdaki kod örneği bölüm sonlarının nasıl kaldırılacağını gösterir:

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

Bir Bölümü Taşı

Belgenizde bir bölümü bir konumdan diğerine taşımak istiyorsanız o bölümün dizinini almanız gerekir. Aspose.Words, SectionCollection‘den bölüm konumu almanızı sağlar. Belgenizdeki tüm bölümleri almak için Sections özelliğini kullanabilirsiniz. Ancak yalnızca ilk bölümü almak istiyorsanız FirstSection özelliğini kullanabilirsiniz.

Aşağıdaki kod örneği, ilk bölüme nasıl erişileceğini ve bileşik düğümün alt öğelerinin nasıl yineleneceğini gösterir:

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

Bir Bölüm Düzeni Belirtin

Bazen farklı belge bölümleri için yaratıcı düzenler oluşturarak belgenizin daha iyi görünmesini istersiniz. Geçerli bölüm ızgarasının türünü belirtmek istiyorsanız SectionLayoutMode numaralandırmasını kullanarak bir bölüm düzeni modu seçebilirsiniz:

  • Varsayılan
  • Kafes
  • Çizgi Izgarası
  • SnapToChar’lar

Aşağıdaki kod örneği, her sayfanın sahip olabileceği satır sayısının nasıl sınırlandırılacağını gösterir:

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

Bir Bölümü Düzenleme

Belgenize yeni bir bölüm eklediğinizde düzenleyebileceğiniz herhangi bir gövde veya paragraf olmayacaktır. Aspose.Words, EnsureMinimum yöntemini kullanarak bir bölümün en az bir paragraf içeren bir gövde içerdiğini garanti etmenize olanak tanır; belgeye otomatik olarak bir Gövde (veya HeaderFooter) düğümü ekleyecek ve ardından ona bir Paragraf ekleyecektir.

Aşağıdaki kod örneği, EnsureMinimum kullanarak yeni bir bölüm düğümünün nasıl hazırlanacağını gösterir:

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

İçeriği Ekle veya Başına Ekle

Bir bölümün başına/sonuna şekil çizmek veya metin veya resim eklemek istiyorsanız Section sınıfının AppendContent ve PrependContent yöntemlerini kullanabilirsiniz.

Aşağıdaki kod örneği, mevcut bir bölümün içeriğinin nasıl ekleneceğini gösterir:

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

Bir Bölümü Klonla

Aspose.Words, Clone yöntemini kullanarak bir bölümün tam kopyasını oluşturarak bir bölümü çoğaltmanıza olanak tanır.

Aşağıdaki kod örneği, belgenizdeki ilk bölümün nasıl kopyalanacağını gösterir:

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

Belgeler Arasında Bölümleri Kopyalama

Bazı durumlarda, birçok bölümü olan büyük belgeleriniz olabilir ve bir bölümün içeriğini bir belgeden diğerine kopyalamak isteyebilirsiniz.

Aspose.Words, ImportNode yöntemini kullanarak belgeler arasında bölümleri kopyalamanıza olanak tanır.

Aşağıdaki kod örneği, bölümlerin belgeler arasında nasıl kopyalanacağını gösterir:

# 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

Bölüm Üstbilgisi ve Altbilgisiyle Çalışma

Her bölüm için üstbilgi veya altbilgiyi görüntülemeye ilişkin temel kurallar oldukça basittir:

  1. Bölümün belirli bir türde kendi üstbilgisi/altbilgisi yoksa önceki bölümden alınır.
  2. Sayfada görüntülenen üstbilgi/altbilgi türü, “Farklı İlk Sayfa” ve “Farklı Tek ve Çift Sayfalar” bölüm ayarları tarafından kontrol edilir; bunlar devre dışı bırakılırsa bölümün kendi başlıkları göz ardı edilir.

Aşağıdaki kod örneği, farklı başlıklara sahip 2 bölümün nasıl oluşturulacağını gösterir:

Belgenizdeki HeaderFooter nesnelerini kaldırmadan üst bilgi ve alt bilgi metinlerini kaldırmak istiyorsanız ClearHeadersFooters yöntemini kullanabilirsiniz. Ayrıca belgenizdeki üstbilgi ve altbilgilerdeki tüm şekilleri kaldırmak için DeleteHeaderFooterShapes yöntemini kullanabilirsiniz.

Aşağıdaki kod örneği, bir bölümdeki tüm üstbilgi ve altbilgilerin içeriğinin nasıl temizleneceğini gösterir:

Aşağıdaki kod örneği, bir bölümdeki tüm üst bilgi alt bilgilerinden tüm şekillerin nasıl kaldırılacağı:

Bir Bölümdeki Sayfa Özelliklerini Özelleştirme

Bir sayfayı veya belgeyi yazdırmadan önce, tek bir sayfanın veya tüm belgenin boyutunu ve düzenini özelleştirmek ve değiştirmek isteyebilirsiniz. Sayfa düzeni ile, farklı ilk sayfaları veya tek sayfaları yazdırmak için belge sayfalarının kenar boşlukları, yön ve boyut gibi ayarlarını değiştirebilirsiniz.

Aspose.Words, PageSetup sınıfını kullanarak sayfa ve bölüm özelliklerini özelleştirmenize olanak tanır.

Aşağıdaki kod örneği, geçerli bölüm için sayfa boyutu ve yönlendirme gibi özelliklerin nasıl ayarlanacağını gösterir:

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

Aşağıdaki kod örneği, tüm bölümlerde sayfa özelliklerinin nasıl değiştirileceğini gösterir:

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

Ayrıca bakınız