Верхні та нижні колонтитули в документах Word використовуються для форматування та відображення важливої інформації, такої як тема, розділ, номер сторінки, Copywrite тощо. Під час програмної роботи з документами Word вам може знадобитися додати або видалити верхні та нижні колонтитули. З цією метою ця стаття навчить вас додавати та видаляти верхні та нижні колонтитули в документах Word за допомогою C++.
- C++ API для додавання та видалення верхнього та нижнього колонтитулів у документах Word
- Додайте верхній і нижній колонтитули в документи Word за допомогою C++
- Видалення верхнього та нижнього колонтитулів у документі Word за допомогою C++
C++ API для додавання та видалення верхнього та нижнього колонтитулів у документах Word
Щоб додати верхні та нижні колонтитули в документи Word, ми будемо використовувати Aspose.Words for C++ API. Це рідний C++ API, який підтримує створення, читання та змінення документів Word без встановлення Microsoft Word. Ви можете встановити API через NuGet або завантажити його безпосередньо з розділу Завантаження.
PM> Install-Package Aspose.Words.Cpp
Додайте верхній і нижній колонтитули в документи Word за допомогою C++
Верхні та нижні колонтитули в документі Word поділені на три частини: титульну сторінку, парні сторінки та непарні сторінки. Ви можете додавати різні колонтитули для цих розділів. Крім того, ви також можете додавати такі елементи, як зображення та таблиці, у верхні та нижні колонтитули.
У цьому прикладі ми створимо новий документ Word і додамо інший заголовок для титульної сторінки. До наступних сторінок ми додамо верхній колонтитул із зображенням і нижній колонтитул із таблицею. Нижче наведено кроки, щоб додати верхні та нижні колонтитули в документи Word.
- Створіть екземпляр класу Document для представлення документа Word.
- Створіть екземпляр класу DocumentBuilder, використовуючи створений раніше об’єкт Document.
- Укажіть, що вам потрібні різні колонтитули для титульної сторінки за допомогою методу PageSetup->setDifferentFirstPageHeaderFooter(bool value).
- Установіть властивості шрифту для тексту заголовка.
- Створіть верхній і нижній колонтитули для наступних сторінок.
- Додайте зображення в заголовок за допомогою DocumentBuilder->InsertImage(System::SharedPtr)System::Drawing::Image зображення, Aspose::Words::Drawing::RelativeHorizontalPosition horzPos, подвійний ліворуч, Aspose::Words::Drawing::RelativeVerticalPosition vertPos, подвійний верх, подвійна ширина, подвійна висота, Aspose::Words::Drawing::WrapType wrapType) метод.
- Додати таблицю в нижній колонтитул.
- Збережіть документ Word за допомогою методу Document->Save(System::String fileName).
Наведений нижче приклад коду демонструє, як додавати верхні та нижні колонтитули в документи Word за допомогою C++.
void CopyHeadersFootersFromPreviousSection(const System::SharedPtr<Section>& section)
{
System::SharedPtr<Section> previousSection = System::DynamicCast<Section>(section->get_PreviousSibling());
if (previousSection == nullptr)
{
return;
}
section->get_HeadersFooters()->Clear();
for (System::SharedPtr<Node> headerFooterNode : System::IterateOver(previousSection->get_HeadersFooters()))
{
section->get_HeadersFooters()->Add(headerFooterNode->Clone(true));
}
}
int main()
{
// Шляхи вихідного та вихідного каталогу.
System::String inputDataDir = u"SourceDirectory\\";
System::String outputDataDir = u"OutputDirectory\\";
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::SharedPtr<Section> currentSection = builder->get_CurrentSection();
System::SharedPtr<PageSetup> pageSetup = currentSection->get_PageSetup();
// Укажіть, чи хочемо ми, щоб колонтитули першої сторінки відрізнялися від інших сторінок.
// Ви також можете використовувати властивість PageSetup.OddAndEvenPagesHeaderFooter, щоб указати
// Різні колонтитули для парних і непарних сторінок.
pageSetup->set_DifferentFirstPageHeaderFooter(true);
// --- Створити заголовок для першої сторінки. ---
pageSetup->set_HeaderDistance(20);
builder->MoveToHeaderFooter(HeaderFooterType::HeaderFirst);
builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Center);
// Встановити властивості шрифту для тексту заголовка.
builder->get_Font()->set_Name(u"Arial");
builder->get_Font()->set_Bold(true);
builder->get_Font()->set_Size(14);
// Вкажіть назву верхнього колонтитула для першої сторінки.
builder->Write(u"Aspose.Words Header/Footer Creation Primer - Title Page.");
// --- Створіть заголовок для сторінок, відмінних від першої. ---
pageSetup->set_HeaderDistance(20);
builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);
// Вставте абсолютно позиціоноване зображення у верхній/лівий кут заголовка.
// Відстань від верхнього/лівого країв сторінки становить 10 точок.
System::String imageFileName = inputDataDir + u"Desert.jpg";
builder->InsertImage(imageFileName, RelativeHorizontalPosition::Page, 10, RelativeVerticalPosition::Page, 10, 50, 50, WrapType::Through);
builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right);
// Укажіть заголовок для інших сторінок.
builder->Write(u"Aspose.Words Header/Footer Creation Primer.");
// --- Створити нижній колонтитул для сторінок, крім першої. ---
builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);
// Ми використовуємо таблицю з двома клітинками, щоб зробити одну частину тексту на рядку (з нумерацією сторінок)
// Вирівнювати по лівому краю, а іншу частину тексту (з авторським правом) вирівнювати по правому краю.
builder->StartTable();
// Очистити межі таблиці.
builder->get_CellFormat()->ClearFormatting();
builder->InsertCell();
// Встановіть для першої комірки 1/3 ширини сторінки.
builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 / 3));
// Вставте тут текст нумерації сторінок.
// Він використовує поля PAGE і NUMPAGES для автоматичного обчислення номера поточної сторінки та загальної кількості сторінок.
builder->Write(u"Page ");
builder->InsertField(u"PAGE", u"");
builder->Write(u" of ");
builder->InsertField(u"NUMPAGES", u"");
// Вирівняйте цей текст по лівому краю.
builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Left);
builder->InsertCell();
// Встановіть другу комірку на 2/3 ширини сторінки.
builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 * 2 / 3));
builder->Write(u"(C) 2001 Aspose Pty Ltd. All rights reserved.");
// Вирівняйте цей текст праворуч.
builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right);
builder->EndRow();
builder->EndTable();
builder->MoveToDocumentEnd();
// Додайте розрив сторінки, щоб створити другу сторінку, на якій буде видно основні колонтитули.
builder->InsertBreak(BreakType::PageBreak);
// Додайте розрив розділу, щоб створити третю сторінку з іншою орієнтацією.
builder->InsertBreak(BreakType::SectionBreakNewPage);
// Отримайте новий розділ і налаштування його сторінки.
currentSection = builder->get_CurrentSection();
pageSetup = currentSection->get_PageSetup();
// Установіть альбомну орієнтацію сторінки для нового розділу.
pageSetup->set_Orientation(Orientation::Landscape);
// Цей розділ не потребує іншого верхнього/нижнього колонтитулів першої сторінки.
// У документі нам потрібен лише один титульний аркуш. Верхній/нижній колонтитул цієї сторінки
// вже було визначено в попередньому розділі
pageSetup->set_DifferentFirstPageHeaderFooter(false);
// У цьому розділі за замовчуванням відображаються колонтитули з попереднього розділу.
// Викличте currentSection.HeadersFooters.LinkToPrevious(false), щоб скасувати цю поведінку.
// Ширина сторінки для нового розділу інша, тому нам потрібно встановити
// різна ширина комірок для таблиці нижнього колонтитула.
currentSection->get_HeadersFooters()->LinkToPrevious(false);
// Якщо ми хочемо використати вже існуючий набір колонтитулів для цього розділу
// але з деякими незначними змінами тоді може бути доцільно скопіювати верхні/нижні колонтитули
// з попереднього розділу та застосувати необхідні зміни там, де ми їх хочемо.
CopyHeadersFootersFromPreviousSection(currentSection);
// Знайдіть колонтитул, який ми хочемо змінити.
System::SharedPtr<HeaderFooter> primaryFooter = currentSection->get_HeadersFooters()->idx_get(HeaderFooterType::FooterPrimary);
System::SharedPtr<Row> row = primaryFooter->get_Tables()->idx_get(0)->get_FirstRow();
row->get_FirstCell()->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 / 3));
row->get_LastCell()->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 * 2 / 3));
System::String outputPath = outputDataDir + u"CreateHeaderFooter.docx";
// Збережіть отриманий документ.
doc->Save(outputPath);
}
Видалення верхнього та нижнього колонтитулів у документі Word за допомогою C++
У попередньому розділі ви дізналися, як додавати верхні та нижні колонтитули в документи Word. Подібно до додавання, ви можете видалити верхні та нижні колонтитули з заголовків, парних і непарних сторінок відповідно до ваших потреб. Нижче наведено кроки для видалення всіх колонтитулів у документі Word.
- Завантажте документ Word за допомогою класу Document.
- Створіть два екземпляри класу HeaderFooter для представлення верхніх і нижніх колонтитулів.
- Отримайте колонтитули для заголовків, парних і непарних сторінок за допомогою методу Section->getHeadersFooters()->idxget(Aspose::Words::HeaderFooterType headerFooterType).
- Видаліть верхні та нижні колонтитули за допомогою методу HeaderFooter->Remove().
- Збережіть документ Word за допомогою методу Document->Save(System::String fileName).
Наведений нижче зразок коду показує, як видалити всі верхні та нижні колонтитули в документі Word за допомогою C++.
// Шляхи вихідного та вихідного каталогу.
System::String inputDataDir = u"SourceDirectory\\";
System::String outputDataDir = u"OutputDirectory\\";
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"SampleHeaderFooter.docx");
for (System::SharedPtr<Section> section : System::IterateOver<System::SharedPtr<Section>>(doc))
{
// У розділі можна використовувати до трьох різних колонтитулів (для першої, парної та непарної сторінок).
// Ми перевіряємо та видаляємо їх усі.
System::SharedPtr<HeaderFooter> header;
System::SharedPtr<HeaderFooter> footer;
header = section->get_HeadersFooters()->idx_get(HeaderFooterType::HeaderFirst);
footer = section->get_HeadersFooters()->idx_get(HeaderFooterType::FooterFirst);
if (header != nullptr)
{
header->Remove();
}
if (footer != nullptr)
{
footer->Remove();
}
// Основний верхній і нижній колонтитули використовуються для непарних сторінок.
header = section->get_HeadersFooters()->idx_get(HeaderFooterType::HeaderPrimary);
footer = section->get_HeadersFooters()->idx_get(HeaderFooterType::FooterPrimary);
if (header != nullptr)
{
header->Remove();
}
if (footer != nullptr)
{
footer->Remove();
}
header = section->get_HeadersFooters()->idx_get(HeaderFooterType::HeaderEven);
footer = section->get_HeadersFooters()->idx_get(HeaderFooterType::FooterEven);
if (header != nullptr)
{
header->Remove();
}
if (footer != nullptr)
{
footer->Remove();
}
}
// Шлях вихідного файлу
System::String outputPath = outputDataDir + u"RemoveFooters.docx";
// Збережіть документ.
doc->Save(outputPath);
Отримайте безкоштовну ліцензію
Ви можете спробувати API без обмежень щодо оцінювання, надіславши запит на безкоштовну тимчасову ліцензію.
Висновок
Робота з верхніми та нижніми колонтитулами в документах Word є типовим і частим випадком використання. У цій статті ви дізналися, як працювати з верхніми та нижніми колонтитулами в документах Word за допомогою C++. Зокрема, ви дізналися, як додавати та видаляти колонтитули в документах Word за допомогою API Aspose.Words for C++. API надає низку додаткових функцій для роботи з документами Word, які ви можете детально вивчити, відвідавши офіційну документацію. У разі будь-яких запитань зв’яжіться з нами на нашому безкоштовному форумі підтримки.