کار با بخش ها
گاهی اوقات شما سندی را می خواهید که قالب بندی یکسانی در همه صفحات نداشته باشد. به عنوان مثال، ممکن است لازم باشد قالبهای شماره صفحه را تغییر دهید، اندازه و جهت صفحه متفاوتی داشته باشید، یا اولین صفحه سند را به عنوان صفحه جلد بدون شمارهگذاری داشته باشید. شما می توانید با بخش ها به آن دست پیدا کنید.
بخش ها گره های سطحی هستند که سرصفحه ها و پاورقی ها، جهت گیری، ستون ها، حاشیه ها، قالب بندی شماره صفحه و موارد دیگر را کنترل می کنند.
Aspose.Words به شما امکان می دهد بخش ها را مدیریت کنید، یک سند را به بخش ها تقسیم کنید و تغییرات قالب بندی را انجام دهید که فقط برای یک بخش خاص اعمال می شود. Aspose.Words اطلاعات مربوط به قالب بندی بخش مانند سرصفحه ها و پاورقی ها، تنظیمات صفحه و تنظیمات ستون را در بخش شکست ذخیره می کند.
در این مقاله نحوه کار با بخش ها و بخش ها توضیح داده شده است.
Section و Section Break چیست؟
بخش های سند توسط کلاس های Section و SectionCollection نشان داده می شوند. اشیاء بخش فرزندان مستقیم گره Document هستند و از طریق ویژگی Sections قابل دسترسی هستند. شما می توانید آن گره ها را با استفاده از روش هایی مانند Remove، Add، IndexOf و غیره مدیریت کنید.
Section break گزینه ای است که صفحات سند را به بخش هایی با طرح بندی قابل تنظیم تقسیم می کند.
انواع شکستن بخش
Aspose.Words به شما امکان می دهد اسناد را با استفاده از بخش های مختلف شمارش BreakType تقسیم و قالب بندی کنید:
- SectionBreak Continuous
- SectionBreakNewColumn
- بخش BreakNewPage
- SectionBreakEvenPage
- 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") |
با Section Header و Footer کار کنید
قوانین اساسی برای نمایش سرصفحه یا پاورقی برای هر بخش بسیار ساده است:
- اگر بخش دارای هدر/پانویس از نوع خاصی نباشد، از قسمت قبلی گرفته شده است.
- نوع سرصفحه/پانویس نمایش داده شده در صفحه توسط تنظیمات بخش “صفحه اول متفاوت” و “صفحات زوج و فرد متفاوت” کنترل می شود – اگر غیرفعال باشند، عناوین خود بخش نادیده گرفته می شوند.
مثال کد زیر نحوه ایجاد 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") |