Práce se sekcemi
Práce s oddíly
Dokument Word je rozdělen na jednu nebo více sekcí, z nichž každá má vlastní nastavení stránky, okraje, záhlaví a zápatí. Aspose.Words FOSS pro .NET představuje sekci jako Section uzel, obsahující Body a volitelně záhlaví a zápatí, plus PageSetup který řídí jeho rozvržení. Tato stránka popisuje model objektu sekce, nastavení stránky, záhlaví a zápatí a rozvržení textu do více sloupců.
Objektový model oddílu
Document.Sections vrací SectionCollection – každý Section v dokumentu, každý je CompositeNode a součástí stromu uzlů. Section obsahuje jeden Body ( Story, který obsahuje hlavní odstavce a tabulky oddílu) a v případě přítomnosti také uzly HeaderFooter přístupné přes Section.HeadersFooters, což je HeaderFooterCollection. Document.FirstSection a Document.LastSection poskytují přímý přístup k hraničním oddílům. Section.AppendContent(), PrependContent() a ClearContent() manipulují s obsahem těla oddílu hromadně, zatímco ClearHeadersFooters() a DeleteHeaderFooterShapes() vymazávají obsah záhlaví/zápatí.
Vytváření oddílů a zalomení oddílu
DocumentBuilder.InsertBreak(BreakType) vloží zalomení na pozici kurzoru; BreakType zahrnuje SectionBreakNewPage, SectionBreakContinuous, SectionBreakNewColumn, SectionBreakEvenPage a SectionBreakOddPage pro zahájení nového oddílu, spolu s hodnotami mimo oddíl PageBreak, ColumnBreak, LineBreak a ParagraphBreak. DocumentBuilder.MoveToSection() přesune kurzor na začátek těla konkrétního oddílu. PageSetup.SectionStart čte nebo nastavuje typ zalomení SectionStart zaznamenaný v existujícím oddílu.
Nastavení stránky
Section.PageSetup je PageSetup instance pokrývající rozměry stránky a okraje (PageWidth, PageHeight, TopMargin, BottomMargin, LeftMargin, RightMargin, Gutter), Orientation a PaperSize, a okraje stránky na jednotlivých stranách (Borders, BorderAppliesTo přes PageBorderAppliesTo, BorderDistanceFrom přes PageBorderDistanceFrom, BorderAlwaysInFront, BorderSurroundsHeader, BorderSurroundsFooter). Číslování řádků je řízeno pomocí LineNumberRestartMode, LineNumberCountBy, LineNumberDistanceFromText a LineStartingNumber. PageSetup.ClearFormatting() resetuje nastavení na výchozí hodnoty.
Záhlaví a zápatí
Section.HeadersFooters je HeaderFooterCollection s typovanými přístupy – HeaderPrimary, HeaderFirst, HeaderEven, FooterPrimary, FooterFirst, FooterEven – spolu s GetByHeaderFooterType(), Add() a LinkToPrevious(). Každý HeaderFooter je Story (např. Body) identifikovaný podle svého HeaderFooterType a označený jako IsHeader / IsLinkedToPrevious. PageSetup.DifferentFirstPageHeaderFooter a PageSetup.OddAndEvenPagesHeaderFooter řídí, zda Word očekává použití variant záhlaví/zápatí pro první stránku a sudé stránky vůbec.
Více textových sloupců
PageSetup.TextColumns vrací TextColumnCollection (Count, EvenlySpaced, LineBetween, Spacing, Width) s SetCount() pro rozvržení těla sekce do více sloupců. Jednotlivé sloupce jsou TextColumn instance (Width, SpaceAfter) jakmile je kolekce naplněna více než jedním sloupcem.
Tipy a osvědčené postupy
- Zlom sekce nese formátování pro sekci, která follows to – nastavení
PageSetupvlastnosti naSectionjste právě vytvořili (poInsertBreak) ovlivňuje obsah, který následuje po přerušení, ne před ním. - Použijte
SectionBreakContinuous, když potřebujete změnu nastavení stránky (například přepnutí na více sloupců textu) bez zahájení nové stránky; použijteSectionBreakNewPage, když má nová sekce vždy začínat na čisté stránce. HeaderFooterCollection.LinkToPrevious()znovu připojí header/footer sekce, aby zdědila obsah předchozí sekce – udělejte to před psaním nového obsahu header/footer, pokud chcete, aby nová sekce začínala nezávisle na předchozí.PageSetup.DifferentFirstPageHeaderFooteraOddAndEvenPagesHeaderFooterse projeví pouze v případě, že odpovídající variantyHeaderFooterType(HeaderFirst,HeaderEvena tak dále) skutečně existují vSection.HeadersFooters– zapněte příznak a přidejte odpovídající header/footer společně.Section.Bodya každýHeaderFooterjsou samostatné instanceStory–Range.Fields, bookmarks a další operace omezené na rozsah vBodysekce automaticky nezasahují do jejích header/footer.
Časté problémy
| Problém | Příčina | Oprava |
|---|---|---|
| Nastavení stránky nové sekce neodpovídá tomu, co jsem nastavil | PageSetup byl nastaven na špatnou Section instanci | Nastavit PageSetup na sekci, která follows přerušení, ne to předchozí |
| Obsah záhlaví/pati z předchozí sekce se neočekávaně objeví v nové sekci | Záhlaví/paty nové sekce jsou stále propojeny s předchozí sekcí | Zavolejte HeaderFooterCollection.LinkToPrevious(false) (nebo přidejte odlišný obsah záhlaví/pati), aby se odpojily |
| Záhlaví/pata první stránky nebo sudé stránky je ignorováno | DifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter je false, nebo odpovídající varianta HeaderFooterType neexistuje | Nastavte příznak na PageSetup a ujistěte se, že odpovídající varianta záhlaví/pati je přítomna |
| Vícesloupcové rozvržení se nepoužije | TextColumns.SetCount() byl zavolán s počtem 1, nebo ve špatné sekci PageSetup | Vyvolejte SetCount() s více než jedním sloupcem na PageSetup.TextColumns cílové sekce |
FAQ
Jak mohu začít novou sekci, aniž bych začínal novou stránku?
Vložte SectionBreakContinuous přerušení s DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous).
Jak mohu sekci přiřadit vlastní okraje a orientaci?
Vložte zalomení sekce, pak nastavte vlastnosti v novém oddílu PageSetup – TopMargin, BottomMargin, LeftMargin, RightMargin, Orientation a PaperSize.
Jak mohu nastavit, aby první stránka sekce používala jiné záhlaví?
Nastavte PageSetup.DifferentFirstPageHeaderFooter = true v této sekci a přidejte HeaderFooter typu HeaderFirst (a FooterFirst, pokud je potřeba) do její kolekce HeadersFooters.
Jak rozvrhnout tělo textu sekce do dvou sloupců?
Zavolejte PageSetup.TextColumns.SetCount(2) na sekci a poté upravte Spacing a EvenlySpaced / jednotlivé hodnoty TextColumn.Width podle potřeby.
API Reference Shrnutí
| Třída / výčet | Popis: |
|---|---|
Section | Uzel sekce; Body, HeadersFooters, PageSetup |
SectionCollection | Každý Section v dokumentu, přes Document.Sections |
Body / Story | Hlavní kontejner obsahu pro sekci (Body) nebo hlavičku/patku (HeaderFooter) |
PageSetup | Rozměry stránky, okraje, orientace, ohraničení a sloupce pro sekci |
HeaderFooter / HeaderFooterCollection | Obsah záhlaví/patičky a typované přístupové metody pro sekci |
HeaderFooterType | Určuje, která varianta záhlaví/zápatí (primary, first, even) je u HeaderFooter |
TextColumn / TextColumnCollection | Vícesloupcové rozvržení textu pro sekci |
PaperSize / Orientation / Margins | Velikost stránky, orientace a předdefinované hodnoty okrajů |
PageBorderAppliesTo / PageBorderDistanceFrom | Na kterých stránkách se okraj stránky tiskne a jaký je jeho referenční okraj |
SectionStart / BreakType | Typ oddílu přerušení zaznamenaný v sekci a druhy přerušení, které DocumentBuilder.InsertBreak() přijímá |
LineNumberRestartMode | Když se automatické číslování řádků restartuje v rámci sekce |