Работа с раздели

Понякога искате документ, който няма един и същ формат във всички страници. Например, може да се наложи да промените форматите на номера на страниците, да имате различен размер и ориентация на страниците, или да имате първата страница с документи като корица без номерация. Можете да постигнете това с секции.

Раздели са нива възли, които контролират заглавни части и подножици, ориентация, колони, маржове, форматиране на страница номер и други.

Aspose.Words ви позволява да управлявате секции, да разделяте документ на секции и да правите промени във форматирането, които се прилагат само към определен раздел. Aspose.Words съхранява информация за раздел форматиране като заглавни части и подметки, настройка на страница, и настройките на колона в раздел пробив.

Тази статия обяснява как да работите с раздели и раздел прекъсвания.

Какво е раздел и раздел почивка е

Разделите на документите са представени от Section както и SectionCollection Класове. Предмети на раздел са незабавни деца на Document Възел и може да бъде достъпен чрез Sections собственост. Можете да управлявате тези възли чрез използване на някои методи като Remove, Add, IndexOf, и други.

Пробив на раздел е опция, която разделя страниците на документи в раздели с персонализирани оформление.

Видове прекъсване на раздел

Aspose.Words позволява да разделите и форматирате документи с помощта на различни прекъсвания на раздел BreakType Изброяване:

  • CreakBreakContinulous
  • Раздел BreakNewColumn
  • SectionBreakNewPage
  • 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-Java.git.
/// <summary>
/// Insert section breaks before the specified paragraphs.
/// </summary>
private void insertSectionBreaks(ArrayList<Paragraph> topicStartParas)
{
DocumentBuilder builder = new DocumentBuilder(mDoc);
for (Paragraph para : topicStartParas)
{
Section section = para.getParentSection();
// Insert section break if the paragraph is not at the beginning of a section already.
if (para != section.getBody().getFirstParagraph())
{
builder.moveTo(para.getFirstChild());
builder.insertBreak(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.getBody().getLastParagraph().remove();
}
}
}

Използвайте Remove метод за изтриване на прекъсване на раздел. Ако не е необходимо да премахнете конкретен раздел пробив и вместо да изтриете съдържанието на този раздел, можете да използвате ClearContent метод.

Следният пример с код показва как се премахват разделите:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
private void removeSectionBreaks(Document doc)
{
// Loop through all sections starting from the section that precedes the last one and moving to the first section.
for (int i = doc.getSections().getCount() - 2; i >= 0; i--)
{
// Copy the content of the current section to the beginning of the last section.
doc.getLastSection().prependContent(doc.getSections().get(i));
// Remove the copied section.
doc.getSections().get(i).remove();
}
}

Преместване на раздел

Ако искате да преместите раздел от една позиция в друга във вашия документ, трябва да получите индекса на този раздел. Aspose.Words позволява да получите позиция раздел от а SectionCollection. Можеш да използваш Sections собственост, за да получите всички раздели в документа си. Но ако искате да получите само първата част, можете да използвате FirstSection собственост.

Следният пример за код показва как да се влезе в първата секция и да се итерат чрез децата на композитен възел:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.write("Section 1");
builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY);
builder.write("Primary header");
builder.moveToHeaderFooter(HeaderFooterType.FOOTER_PRIMARY);
builder.write("Primary footer");
Section section = doc.getFirstSection();
// 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 node : section)
{
switch (node.getNodeType())
{
case NodeType.BODY:
{
Body body = (Body)node;
System.out.println("Body:");
System.out.println(MessageFormat.format("\t\"{0}\"", body.getText().trim()));
break;
}
case NodeType.HEADER_FOOTER:
{
HeaderFooter headerFooter = (HeaderFooter)node;
System.out.println(MessageFormat.format("HeaderFooter type: {0}:", headerFooter.getHeaderFooterType()));
System.out.println(MessageFormat.format("\t\"{0}\"", headerFooter.getText().trim()));
break;
}
default:
{
throw new Exception("Unexpected node type in a section.");
}
}
}

Посочете подреждане на раздел

Понякога искате документът ви да изглежда по-добре, като правите творчески макети за различни раздели от документи. Ако искате да посочите вида на текущата мрежа на раздел, можете да изберете режим на оформление на раздел с помощта на SectionLayoutMode Изброяване:

  • По подразбиране
  • Мрежа
  • LineGrid
  • SnapToChars

Следният пример за код показва как да се ограничи броят на редовете, които всяка страница може да има:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document();
DocumentBuilder builder = new 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.getPageSetup().setLayoutMode(SectionLayoutMode.LINE_GRID);
builder.getPageSetup().setLinesPerPage(15);
builder.getParagraphFormat().setSnapToGrid(true);
for (int i = 0; i < 30; i++)
builder.write("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ");
doc.save(getArtifactsDir() + "WorkingWithDocumentOptionsAndSettings.LinesPerPage.docx");

Редактиране на раздел

Когато добавите нов раздел към вашия документ, няма да има орган или параграф, който можете да редактирате. Aspose.Words ви позволява да гарантира, че раздел съдържа орган с най-малко един параграф, като се използва EnsureMinimum метод го добавя автоматично Body (или HeaderFooter) възел към документа и след това добавя § към него.

Следният пример за код показва как да се подготви нов възел раздел използване EnsureMinimum:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document();
// If we add a new section like this, it will not have a body, or any other child nodes.
doc.getSections().add(new Section(doc));
// Run the "EnsureMinimum" method to add a body and a paragraph to this section to begin editing it.
doc.getLastSection().ensureMinimum();
doc.getSections().get(0).getBody().getFirstParagraph().appendChild(new Run(doc, "Hello world!"));

Добавяне или предварително използване на съдържание

Ако искате да начертаете някаква форма или да добавите текст или изображение в началото/ края на раздел, можете да използвате AppendContent както и PrependContent методи на Section Клас.

Следният пример за код показва как да се добави съдържание в съществуващ раздел:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.write("Section 1");
builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE);
builder.write("Section 2");
builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE);
builder.write("Section 3");
// This is the section that we will append and prepend to.
Section section = doc.getSections().get(2);
// Insert the contents of the first section to the beginning of the third section.
Section sectionToPrepend = doc.getSections().get(0);
section.prependContent(sectionToPrepend);
// Insert the contents of the second section to the end of the third section.
Section sectionToAppend = doc.getSections().get(1);
section.appendContent(sectionToAppend);

Клониране на раздел

Aspose.Words ви позволява да дублирате раздел чрез създаване на пълно копие от него с помощта на deepClone метод.

Следният пример за код показва как да клонирате първия раздел във вашия документ:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document(getMyDir() + "Document.docx");
Section cloneSection = doc.getSections().get(0).deepClone();

Копиране на раздели между документи

В някои случаи може да имате големи документи с много раздели и искате да копирате съдържанието на раздел от един документ в друг.

Aspose.Words ви позволява да копирате раздели между документи с помощта на ImportNode метод.

Следният пример за код показва как да копирате раздели между документи:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document srcDoc = new Document(getMyDir() + "Document.docx");
Document dstDoc = new Document();
Section sourceSection = srcDoc.getSections().get(0);
Section newSection = (Section) dstDoc.importNode(sourceSection, true);
dstDoc.getSections().add(newSection);
dstDoc.save(getArtifactsDir() + "WorkingWithSection.CopySection.docx");

Основните правила за показване на заглавна част или стъпало за всеки раздел са доста прости:

  1. Ако секцията няма собствени заглавни части/футови части от определен тип, тогава тя се взема от предишния раздел.
  2. Видът на заглавната част/футъра, показан на страницата, се контролира от “Различните първа страница” и “Различните страници на Odd & Even” в раздел “Ако те са изключени, тогава собствените заглавия на секцията се игнорират.

Следният пример за код показва как се създават 2 секции с различни заглавни части:

Ако искате да премахнете текста на заглавните части и подметките, без да премахвате HeaderFooter обекти в документа, можете да използвате ClearHeadersFooters метод. В допълнение, можете да използвате DeleteHeaderFooterShapes метод за премахване на всички форми от заглавните части и подметките във вашия документ.

Следният пример за код показва как да изчистите съдържанието на всички заглавни части и подметки в раздел:

Следният пример за код как да премахнете всички форми от всички заглавни части в раздел:

Настройки на страницата в раздел

Преди да отпечатате страница или документ, може да искате да персонализирате и модифицирате размера и оформлението на една страница или целия документ. С настройката на страницата можете да промените настройките на страниците с документи като полета, ориентация и размер за отпечатване на различни първи страници или нечетни страници.

Aspose.Words позволява да персонализирате свойствата на страницата и секцията с помощта на PageSetup Клас.

Следният пример за код показва как да зададете такива свойства като размер на страница и ориентация за текущия раздел:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.getPageSetup().setOrientation(Orientation.LANDSCAPE);
builder.getPageSetup().setLeftMargin(50.0);
builder.getPageSetup().setPaperSize(PaperSize.PAPER_10_X_14);
doc.save(getArtifactsDir() + "WorkingWithDocumentOptionsAndSettings.SetPageSetupAndSectionFormatting.docx");

Следният пример за код показва как да промените свойствата на страницата във всички раздели:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.writeln("Section 1");
doc.appendChild(new Section(doc));
builder.writeln("Section 2");
doc.appendChild(new Section(doc));
builder.writeln("Section 3");
doc.appendChild(new 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 (Section section : doc.getSections())
section.getPageSetup().setPaperSize(PaperSize.LETTER);
doc.save(getArtifactsDir() + "WorkingWithSection.ModifyPageSetupInAllSections.doc");

Вижте също