Верхние и нижние колонтитулы в документах Word используются для форматирования и отображения важной информации, такой как тема, глава, номер страницы, копирайтинг и т. д. При программной работе с документами Word может потребоваться добавить или удалить верхние и нижние колонтитулы. С этой целью в этой статье вы узнаете, как добавлять и удалять верхние и нижние колонтитулы в документах Word с помощью C++.
- C++ API для добавления и удаления верхнего и нижнего колонтитула в документах Word
- Добавить верхний и нижний колонтитулы в документы Word с помощью C++
- Удалить верхний и нижний колонтитулы в документе Word с помощью С++
C++ API для добавления и удаления верхнего и нижнего колонтитула в документах Word
Чтобы добавить верхние и нижние колонтитулы в документы Word, мы будем использовать API Aspose.Words for C++. Это собственный API C++, который поддерживает создание, чтение и изменение документов Word без установки Microsoft Word. Вы можете либо установить API через NuGet, либо загрузить его напрямую из раздела Загрузки.
PM> Install-Package Aspose.Words.Cpp
Добавить верхний и нижний колонтитулы в документы Word с помощью C++
Верхние и нижние колонтитулы в документе Word разделены на три части: титульный лист, четные страницы и нечетные страницы. Вы можете добавить разные верхние и нижние колонтитулы для этих разделов. Кроме того, вы также можете добавлять такие элементы, как изображения и таблицы, в верхние и нижние колонтитулы.
В этом примере мы создадим новый документ Word и добавим другой заголовок для титульного листа. На последующие страницы мы добавим заголовок с изображением и нижний колонтитул с таблицей. Ниже приведены шаги для добавления верхних и нижних колонтитулов в документы Word.
- Создайте экземпляр класса Document для представления документа Word.
- Создайте экземпляр класса DocumentBuilder, используя ранее созданный объект Document.
- Укажите, что вы хотите другой верхний и нижний колонтитулы для титульной страницы, используя метод PageSetup->set_DifferentFirstPageHeaderFooter(bool value).
- Установите свойства шрифта для текста заголовка.
- Создайте верхний и нижний колонтитулы для последующих страниц.
- Добавьте изображение в заголовок с помощью DocumentBuilder->InsertImage(System::SharedPtrSystem::Drawing::Image изображение, Aspose::Words::Drawing::RelativeHorizontalPosition horzPos, двойное левое, Aspose::Words::Drawing::RelativeVerticalPosition vertPos, двойное верхнее, двойная ширина, двойная высота, Aspose::Words::Drawing::WrapType wrapType) метод.
- Добавьте таблицу в нижний колонтитул.
- Сохраните документ Word, используя метод Документ->Сохранить(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 с помощью С++
В предыдущем разделе вы узнали, как добавлять верхние и нижние колонтитулы в документы Word. Подобно добавлению, вы можете удалить верхние и нижние колонтитулы из заголовка, четных и нечетных страниц в соответствии с вашими потребностями. Ниже приведены шаги для удаления всех верхних и нижних колонтитулов в документе Word.
- Загрузите документ Word, используя класс Document.
- Создайте два экземпляра класса HeaderFooter для представления верхних и нижних колонтитулов.
- Получите верхние и нижние колонтитулы для заголовка, четных и нечетных страниц, используя метод Section->get_HeadersFooters()->idx\get(Aspose::Words::HeaderFooterType headerFooterType).
- Удалите верхние и нижние колонтитулы с помощью метода HeaderFooter->Remove().
- Сохраните документ Word, используя метод Документ->Сохранить(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 с помощью Aspose.Words for C++ API. API предоставляет множество дополнительных функций для работы с документами Word, которые вы можете подробно изучить, посетив официальную документацию. Если у вас возникнут вопросы, свяжитесь с нами на нашем бесплатном форуме поддержки.