Hinzufügen oder Entfernen von Kopf und Fußzeilen in Word Dokumenten mit C++

Kopf und Fußzeilen in Word Dokumenten werden verwendet, um wichtige Informationen wie Thema, Kapitel, Seitenzahl, Copywrite usw. zu formatieren und anzuzeigen. Während Sie programmgesteuert mit Word Dokumenten arbeiten, müssen Sie möglicherweise Kopf und Fußzeilen hinzufügen oder entfernen. Zu diesem Zweck erfahren Sie in diesem Artikel, wie Sie mit C++ Kopf und Fußzeilen in Word Dokumenten hinzufügen und entfernen.

Um Kopf und Fußzeilen in Word Dokumenten hinzuzufügen, verwenden wir die API Aspose.Words for C++. Es ist eine native C++-API, die das Erstellen, Lesen und Ändern von Word Dokumenten unterstützt, ohne dass Microsoft Word installiert sein muss. Sie können die API entweder über NuGet installieren oder direkt aus dem Abschnitt Downloads herunterladen.

PM> Install-Package Aspose.Words.Cpp

Die Kopf und Fußzeilen in einem Word Dokument sind in drei Abschnitte unterteilt, die Titelseite, gerade Seiten und ungerade Seiten. Sie können diesen Abschnitten unterschiedliche Kopf und Fußzeilen hinzufügen. Darüber hinaus können Sie auch Elemente wie Bilder und Tabellen in Kopf und Fußzeilen hinzufügen.

In diesem Beispiel erstellen wir ein neues Word Dokument und fügen eine andere Kopfzeile für die Titelseite hinzu. Auf den Folgeseiten fügen wir eine Kopfzeile mit Bild und eine Fußzeile mit Tabelle hinzu. Im Folgenden sind die Schritte zum Hinzufügen von Kopf und Fußzeilen in Word Dokumenten aufgeführt.

Der folgende Beispielcode demonstriert das Hinzufügen von Kopf und Fußzeilen in Word Dokumenten mit 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()
{
	// Quell und Ausgabeverzeichnispfade.
	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();

	// Geben Sie an, ob sich die Kopf-/Fußzeilen der ersten Seite von anderen Seiten unterscheiden sollen.
	// Sie können zur Angabe auch die PageSetup.OddAndEvenPagesHeaderFooter-Eigenschaft verwenden
	// Unterschiedliche Kopf-/Fußzeilen für ungerade und gerade Seiten.
	pageSetup->set_DifferentFirstPageHeaderFooter(true);

	// --- Kopfzeile für die erste Seite erstellen. ---
	pageSetup->set_HeaderDistance(20);
	builder->MoveToHeaderFooter(HeaderFooterType::HeaderFirst);
	builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Center);

	// Schrifteigenschaften für Kopfzeilentext festlegen.
	builder->get_Font()->set_Name(u"Arial");
	builder->get_Font()->set_Bold(true);
	builder->get_Font()->set_Size(14);

	// Kopfzeilentitel für die erste Seite angeben.
	builder->Write(u"Aspose.Words Header/Footer Creation Primer - Title Page.");

	// --- Kopfzeile für andere Seiten als die erste Seite erstellen. ---
	pageSetup->set_HeaderDistance(20);
	builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);

	// Absolut positioniertes Bild in die obere/linke Ecke der Kopfzeile einfügen.
	// Der Abstand vom oberen/linken Rand der Seite ist auf 10 Punkt eingestellt.
	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);

	// Kopfzeilentitel für andere Seiten angeben.
	builder->Write(u"Aspose.Words Header/Footer Creation Primer.");

	// --- Erstellen Sie eine Fußzeile für andere Seiten als die erste Seite. ---
	builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);

	// Wir verwenden eine Tabelle mit zwei Zellen, um einen Teil des Textes in der Zeile zu erstellen (mit Seitennummerierung).
	// Linksbündig, der andere Teil des Textes (mit Copyright) rechtsbündig.
	builder->StartTable();

	// Klare Tabellengrenzen.
	builder->get_CellFormat()->ClearFormatting();

	builder->InsertCell();

	// Stellen Sie die erste Zelle auf 1/3 der Seitenbreite ein.
	builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 / 3));

	// Fügen Sie hier den Seitennummerierungstext ein.
	// Es verwendet die Felder PAGE und NUMPAGES, um die aktuelle Seitenzahl und die Gesamtzahl der Seiten automatisch zu berechnen.
	builder->Write(u"Page ");
	builder->InsertField(u"PAGE", u"");
	builder->Write(u" of ");
	builder->InsertField(u"NUMPAGES", u"");

	// Richten Sie diesen Text linksbündig aus.
	builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Left);

	builder->InsertCell();

	// Stellen Sie die zweite Zelle auf 2/3 der Seitenbreite ein.
	builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 * 2 / 3));

	builder->Write(u"(C) 2001 Aspose Pty Ltd. All rights reserved.");

	// Richten Sie diesen Text rechtsbündig aus.
	builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right);

	builder->EndRow();
	builder->EndTable();

	builder->MoveToDocumentEnd();

	// Fügen Sie einen Seitenumbruch hinzu, um eine zweite Seite zu erstellen, auf der die primären Kopf-/Fußzeilen zu sehen sind.
	builder->InsertBreak(BreakType::PageBreak);

	// Fügen Sie einen Abschnittsumbruch hinzu, um eine dritte Seite mit einer anderen Seitenausrichtung zu erstellen.
	builder->InsertBreak(BreakType::SectionBreakNewPage);

	// Holen Sie sich den neuen Abschnitt und seine Seiteneinrichtung.
	currentSection = builder->get_CurrentSection();
	pageSetup = currentSection->get_PageSetup();

	// Stellen Sie die Seitenausrichtung des neuen Abschnitts auf Querformat ein.
	pageSetup->set_Orientation(Orientation::Landscape);

	// Dieser Abschnitt benötigt keine unterschiedliche Kopf-/Fußzeile der ersten Seite.
	// Wir brauchen nur eine Titelseite im Dokument. Die Kopf-/Fußzeile für diese Seite
	// wurde bereits im vorherigen Abschnitt definiert
	pageSetup->set_DifferentFirstPageHeaderFooter(false);

	// In diesem Abschnitt werden standardmäßig Kopf-/Fußzeilen aus dem vorherigen Abschnitt angezeigt.
	// Rufen Sie currentSection.HeadersFooters.LinkToPrevious(false) auf, um dieses Verhalten abzubrechen.
	// Die Seitenbreite ist für den neuen Abschnitt unterschiedlich und muss daher eingestellt werden 
	// unterschiedliche Zellenbreiten für eine Fußtabelle.
	currentSection->get_HeadersFooters()->LinkToPrevious(false);

	// Wenn wir das bereits vorhandene Kopf-/Fußzeilenset für diesen Abschnitt verwenden möchten 
	// aber mit einigen geringfügigen Änderungen kann es sinnvoll sein, Kopf-/Fußzeilen zu kopieren
	// aus dem vorherigen Abschnitt und wenden Sie die erforderlichen Änderungen an den gewünschten Stellen an.
	CopyHeadersFootersFromPreviousSection(currentSection);

	// Suchen Sie die Fußzeile, die wir ändern möchten.
	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";

	// Speichern Sie das resultierende Dokument.
	doc->Save(outputPath);
}
Druckvorschau der vom Beispielcode generierten Ausgabe

Druckvorschau der vom Beispielcode generierten Ausgabe

Im vorherigen Abschnitt haben Sie gelernt, wie Sie Kopf und Fußzeilen in Word Dokumenten hinzufügen. Ähnlich wie beim Hinzufügen können Sie die Kopf und Fußzeilen je nach Bedarf von den Titel, geraden und ungeraden Seiten entfernen. Im Folgenden sind die Schritte zum Löschen aller Kopf und Fußzeilen in einem Word Dokument aufgeführt.

Der folgende Beispielcode zeigt, wie alle Kopf und Fußzeilen in einem Word Dokument mit C++ gelöscht werden.

// Quell und Ausgabeverzeichnispfade.
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))
{
	// In einem Abschnitt sind bis zu drei verschiedene Kopf und Fußzeilen möglich (für erste, gerade und ungerade Seite).
	// Wir prüfen und löschen alle.
	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();
	}

	// Primäre Kopf und Fußzeile wird für ungerade Seiten verwendet.
	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();
	}
}

// Pfad der Ausgabedatei
System::String outputPath = outputDataDir + u"RemoveFooters.docx";

// Speichern Sie das Dokument.
doc->Save(outputPath);

Holen Sie sich eine kostenlose Lizenz

Sie können die API ohne Evaluierungseinschränkungen testen, indem Sie eine kostenlose temporäre Lizenz anfordern.

Fazit

Das Arbeiten mit Kopf und Fußzeilen in Word Dokumenten ist ein gängiger und häufiger Anwendungsfall. In diesem Artikel haben Sie gelernt, wie Sie in Word Dokumenten mit C++ mit Kopf und Fußzeilen arbeiten. Insbesondere haben Sie gelernt, wie Sie Kopf und Fußzeilen in Word Dokumenten mithilfe von Aspose.Words for C++ API hinzufügen und entfernen. Die API bietet eine Reihe zusätzlicher Funktionen für die Arbeit mit Word Dokumenten, die Sie im Detail erkunden können, indem Sie die offizielle Dokumentation besuchen. Bei Fragen können Sie uns gerne in unserem kostenlosen Support-Forum erreichen.

Siehe auch