Nagłówki i stopki w dokumentach programu Word służą do formatowania i wyświetlania ważnych informacji, takich jak temat, rozdział, numer strony, tekst itp. Podczas programowej pracy z dokumentami programu Word może być konieczne dodawanie lub usuwanie nagłówków i stopek. W tym celu w tym artykule dowiesz się, jak dodawać i usuwać nagłówki i stopki w dokumentach programu Word przy użyciu języka C++.
- C++ API do dodawania i usuwania nagłówka i stopki w dokumentach programu Word
- Dodaj nagłówek i stopkę w dokumentach programu Word przy użyciu języka C++
- Usuń nagłówek i stopkę w dokumencie Word za pomocą C++
C++ API do dodawania i usuwania nagłówka i stopki w dokumentach programu Word
Aby dodać nagłówki i stopki w dokumentach Word, użyjemy API Aspose.Words for C++. Jest to natywny interfejs API języka C++, który obsługuje tworzenie, odczytywanie i modyfikowanie dokumentów programu Word bez konieczności instalowania programu Microsoft Word. Możesz zainstalować API poprzez NuGet lub pobrać bezpośrednio z sekcji Downloads.
PM> Install-Package Aspose.Words.Cpp
Dodaj nagłówek i stopkę w dokumentach programu Word przy użyciu języka C++
Nagłówki i stopki w dokumencie programu Word są podzielone na trzy sekcje: stronę tytułową, strony parzyste i strony nieparzyste. Możesz dodać różne nagłówki i stopki dla tych sekcji. Dodatkowo możesz również dodawać elementy, takie jak obrazy i tabele w nagłówkach i stopkach.
W tym przykładzie utworzymy nowy dokument programu Word i dodamy inny nagłówek strony tytułowej. Do kolejnych stron dodamy nagłówek z obrazkiem oraz stopkę z tabelą. Poniżej przedstawiono kroki dodawania nagłówków i stopek w dokumentach programu Word.
- Utwórz instancję klasy Document, która będzie reprezentować dokument programu Word.
- Utwórz instancję klasy DocumentBuilder, korzystając z wcześniej utworzonego obiektu Document.
- Określ, że chcesz inny nagłówek i stopkę dla strony tytułowej, używając metody PageSetup->setDifferentFirstPageHeaderFooter(bool value).
- Ustaw właściwości czcionki dla tekstu nagłówka.
- Utwórz nagłówek i stopkę dla kolejnych stron.
- Dodaj obraz w nagłówku za pomocą DocumentBuilder->InsertImage(System::SharedPtrSystem::Drawing::Image image, Aspose::Words::Rysunek::RelativeHorizontalPosition horzPos, podwójna lewa, Aspose::Słowa::Rysunek::RelativeVerticalPosition vertPos, podwójna góra, podwójna szerokość, podwójna wysokość, Aspose::Words::Rysunek::WrapType wrapType) metoda.
- Dodaj tabelę w stopce.
- Zapisz dokument programu Word za pomocą metody Document->Save(System::String fileName).
Poniższy przykładowy kod ilustruje sposób dodawania nagłówków i stopek w dokumentach programu Word przy użyciu języka 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()
{
// Ścieżki katalogu źródłowego i wyjściowego.
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();
// Określ, czy chcemy, aby nagłówki/stopki pierwszej strony różniły się od pozostałych stron.
// Do określenia można również użyć właściwości PageSetup.OddAndEvenPagesHeaderFooter
// Różne nagłówki/stopki dla stron parzystych i nieparzystych.
pageSetup->set_DifferentFirstPageHeaderFooter(true);
// --- Utwórz nagłówek dla pierwszej strony. ---
pageSetup->set_HeaderDistance(20);
builder->MoveToHeaderFooter(HeaderFooterType::HeaderFirst);
builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Center);
// Ustaw właściwości czcionki dla tekstu nagłówka.
builder->get_Font()->set_Name(u"Arial");
builder->get_Font()->set_Bold(true);
builder->get_Font()->set_Size(14);
// Określ tytuł nagłówka dla pierwszej strony.
builder->Write(u"Aspose.Words Header/Footer Creation Primer - Title Page.");
// --- Utwórz nagłówek dla stron innych niż pierwsza. ---
pageSetup->set_HeaderDistance(20);
builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);
// Wstaw obraz pozycjonowany bezwzględnie w górnym/lewym rogu nagłówka.
// Odległość od górnej/lewej krawędzi strony jest ustawiona na 10 punktów.
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);
// Określ tytuł nagłówka dla innych stron.
builder->Write(u"Aspose.Words Header/Footer Creation Primer.");
// --- Utwórz stopkę dla stron innych niż pierwsza. ---
builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);
// Używamy tabeli z dwiema komórkami, aby jedna część tekstu znajdowała się w wierszu (z numeracją stron)
// Do wyrównania do lewej, a druga część tekstu (z prawami autorskimi) do prawej.
builder->StartTable();
// Wyczyść granice tabeli.
builder->get_CellFormat()->ClearFormatting();
builder->InsertCell();
// Ustaw pierwszą komórkę na 1/3 szerokości strony.
builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 / 3));
// Tutaj wstaw tekst numeracji stron.
// Używa pól PAGE i NUMPAGES do automatycznego obliczania numeru bieżącej strony i całkowitej liczby stron.
builder->Write(u"Page ");
builder->InsertField(u"PAGE", u"");
builder->Write(u" of ");
builder->InsertField(u"NUMPAGES", u"");
// Wyrównaj ten tekst do lewej.
builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Left);
builder->InsertCell();
// Ustaw drugą komórkę na 2/3 szerokości strony.
builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 * 2 / 3));
builder->Write(u"(C) 2001 Aspose Pty Ltd. All rights reserved.");
// Wyrównaj ten tekst do prawej.
builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right);
builder->EndRow();
builder->EndTable();
builder->MoveToDocumentEnd();
// Dodaj podział strony, aby utworzyć drugą stronę, na której będą widoczne główne nagłówki/stopki.
builder->InsertBreak(BreakType::PageBreak);
// Dodaj podział sekcji, aby utworzyć trzecią stronę z inną orientacją strony.
builder->InsertBreak(BreakType::SectionBreakNewPage);
// Pobierz nową sekcję i jej ustawienia strony.
currentSection = builder->get_CurrentSection();
pageSetup = currentSection->get_PageSetup();
// Ustaw orientację strony nowej sekcji na poziomą.
pageSetup->set_Orientation(Orientation::Landscape);
// Ta sekcja nie wymaga innego nagłówka/stopki na pierwszej stronie.
// Potrzebujemy tylko jednej strony tytułowej w dokumencie. Nagłówek/stopka tej strony
// została już zdefiniowana w poprzedniej sekcji
pageSetup->set_DifferentFirstPageHeaderFooter(false);
// Ta sekcja domyślnie wyświetla nagłówki/stopki z poprzedniej sekcji.
// Wywołaj metodę currentSection.HeadersFooters.LinkToPrevious(false), aby anulować to zachowanie.
// Szerokość strony jest inna dla nowej sekcji i dlatego musimy ją ustawić
// różne szerokości komórek dla tabeli stopki.
currentSection->get_HeadersFooters()->LinkToPrevious(false);
// Jeśli chcemy użyć już istniejącego zestawu nagłówka/stopki dla tej sekcji
// ale po drobnych modyfikacjach może być celowe skopiowanie nagłówków/stopek
// z poprzedniej sekcji i zastosuj niezbędne modyfikacje tam, gdzie chcemy.
CopyHeadersFootersFromPreviousSection(currentSection);
// Znajdź stopkę, którą chcemy zmienić.
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";
// Zapisz wynikowy dokument.
doc->Save(outputPath);
}
Usuń nagłówek i stopkę w dokumencie Word za pomocą C++
W poprzedniej sekcji nauczyłeś się, jak dodawać nagłówki i stopki w dokumentach programu Word. Podobnie jak w przypadku dodawania, możesz usuwać nagłówki i stopki ze stron tytułowych, parzystych i nieparzystych, zgodnie z własnymi potrzebami. Poniżej przedstawiono kroki, aby usunąć wszystkie nagłówki i stopki w dokumencie programu Word.
- Załaduj dokument programu Word, używając klasy Document.
- Utwórz dwie instancje klasy HeaderFooter reprezentujące nagłówki i stopki.
- Pobierz nagłówki i stopki dla stron tytułowych, parzystych i nieparzystych za pomocą metody Section->getHeadersFooters()->idxget(Aspose::Words::HeaderFooterType headerFooterType).
- Usuń nagłówki i stopki za pomocą metody HeaderFooter->Remove().
- Zapisz dokument programu Word za pomocą metody Document->Save(System::String fileName).
Poniższy przykładowy kod pokazuje, jak usunąć wszystkie nagłówki i stopki w dokumencie programu Word przy użyciu języka C++.
// Ścieżki katalogu źródłowego i wyjściowego.
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))
{
// W sekcji możliwe są do trzech różnych nagłówków i stopek (dla stron pierwszych, parzystych i nieparzystych).
// Sprawdzamy i usuwamy je wszystkie.
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();
}
// Główny nagłówek i stopka są używane dla stron nieparzystych.
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();
}
}
// Ścieżka pliku wyjściowego
System::String outputPath = outputDataDir + u"RemoveFooters.docx";
// Zapisz dokument.
doc->Save(outputPath);
Uzyskaj bezpłatną licencję
Możesz wypróbować interfejs API bez ograniczeń ewaluacyjnych, prosząc o bezpłatną licencję tymczasową.
Wniosek
Praca z nagłówkami i stopkami w dokumentach programu Word jest powszechnym i częstym przypadkiem użycia. W tym artykule nauczyłeś się, jak pracować z nagłówkami i stopkami w dokumentach programu Word przy użyciu języka C++. W szczególności nauczyłeś się dodawać i usuwać nagłówki i stopki w dokumentach programu Word za pomocą interfejsu API Aspose.Words for C++. Interfejs API zapewnia szereg dodatkowych funkcji do pracy z dokumentami programu Word, które można szczegółowo poznać, odwiedzając oficjalną dokumentację. W przypadku jakichkolwiek pytań prosimy o kontakt na naszym bezpłatnym forum pomocy technicznej.