Přidat nebo odebrat záhlaví a zápatí v dokumentech aplikace Word pomocí C++

Záhlaví a zápatí v dokumentech aplikace Word se používají k formátování a zobrazení důležitých informací, jako je téma, kapitola, číslo stránky, Copywrite atd. Při programové práci s dokumenty aplikace Word může být nutné přidat nebo odebrat záhlaví a zápatí. Za tímto účelem vás tento článek naučí, jak přidávat a odstraňovat záhlaví a zápatí v dokumentech aplikace Word pomocí C++.

Chcete-li přidat záhlaví a zápatí do dokumentů aplikace Word, použijeme API Aspose.Words for C++. Jedná se o nativní C++ API, které podporuje vytváření, čtení a úpravy dokumentů aplikace Word bez nutnosti instalace aplikace Microsoft Word. Rozhraní API můžete nainstalovat buď prostřednictvím NuGet, nebo si jej stáhnout přímo ze sekce Downloads.

PM> Install-Package Aspose.Words.Cpp

Záhlaví a zápatí v dokumentu aplikace Word jsou rozděleny do tří částí, titulní stránka, sudé stránky a liché stránky. Pro tyto sekce můžete přidat různá záhlaví a zápatí. Kromě toho můžete také přidat prvky, jako jsou obrázky a tabulky, do záhlaví a zápatí.

V tomto příkladu vytvoříme nový dokument aplikace Word a přidáme jiné záhlaví pro titulní stránku. Na následující stránky přidáme záhlaví s obrázkem a zápatí s tabulkou. Následují kroky pro přidání záhlaví a zápatí do dokumentů aplikace Word.

Následující ukázkový kód ukazuje, jak přidat záhlaví a zápatí do dokumentů aplikace Word pomocí 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()
{
	// Cesty zdrojového a výstupního adresáře.
	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();

	// Určete, zda chceme, aby se záhlaví/zápatí první stránky lišilo od ostatních stránek.
	// K určení můžete také použít vlastnost PageSetup.OddAndEvenPagesHeaderFooter
	// Různá záhlaví/zápatí pro liché a sudé stránky.
	pageSetup->set_DifferentFirstPageHeaderFooter(true);

	// --- Vytvořit záhlaví pro první stránku. ---
	pageSetup->set_HeaderDistance(20);
	builder->MoveToHeaderFooter(HeaderFooterType::HeaderFirst);
	builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Center);

	// Nastavte vlastnosti písma pro text záhlaví.
	builder->get_Font()->set_Name(u"Arial");
	builder->get_Font()->set_Bold(true);
	builder->get_Font()->set_Size(14);

	// Zadejte název záhlaví pro první stránku.
	builder->Write(u"Aspose.Words Header/Footer Creation Primer - Title Page.");

	// --- Vytvořit záhlaví pro stránky jiné než první. ---
	pageSetup->set_HeaderDistance(20);
	builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);

	// Vložte absolutně umístěný obrázek do horního/levého rohu záhlaví.
	// Vzdálenost od horního/levého okraje stránky je nastavena na 10 bodů.
	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);

	// Pro další stránky zadejte nadpis záhlaví.
	builder->Write(u"Aspose.Words Header/Footer Creation Primer.");

	// --- Vytvořit zápatí pro stránky jiné než první. ---
	builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);

	// Pomocí tabulky se dvěma buňkami vytvoříme jednu část textu na řádku (s číslováním stránek)
	// Zarovnat doleva a druhou část textu (s autorským právem) zarovnat doprava.
	builder->StartTable();

	// Vymazat okraje tabulky.
	builder->get_CellFormat()->ClearFormatting();

	builder->InsertCell();

	// Nastavte první buňku na 1/3 šířky stránky.
	builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 / 3));

	// Sem vložte text číslování stránek.
	// K automatickému výpočtu aktuálního čísla stránky a celkového počtu stránek používá pole PAGE a NUMPAGES.
	builder->Write(u"Page ");
	builder->InsertField(u"PAGE", u"");
	builder->Write(u" of ");
	builder->InsertField(u"NUMPAGES", u"");

	// Zarovnejte tento text doleva.
	builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Left);

	builder->InsertCell();

	// Nastavte druhou buňku na 2/3 šířky stránky.
	builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 * 2 / 3));

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

	// Zarovnejte tento text doprava.
	builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right);

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

	builder->MoveToDocumentEnd();

	// Přidáním konce stránky vytvoříte druhou stránku, na které budou vidět primární záhlaví/zápatí.
	builder->InsertBreak(BreakType::PageBreak);

	// Přidáním konce oddílu vytvoříte třetí stránku s jinou orientací stránky.
	builder->InsertBreak(BreakType::SectionBreakNewPage);

	// Získejte novou sekci a její nastavení stránky.
	currentSection = builder->get_CurrentSection();
	pageSetup = currentSection->get_PageSetup();

	// Nastavte orientaci stránky nové sekce na šířku.
	pageSetup->set_Orientation(Orientation::Landscape);

	// Tato sekce nepotřebuje jiné záhlaví/zápatí první stránky.
	// V dokumentu potřebujeme pouze jednu titulní stránku. Záhlaví/zápatí této stránky
	// již bylo definováno v předchozí části
	pageSetup->set_DifferentFirstPageHeaderFooter(false);

	// Tato sekce standardně zobrazuje záhlaví/zápatí z předchozí sekce.
	// Toto chování zrušíte voláním currentSection.HeadersFooters.LinkToPrevious(false).
	// Šířka stránky je pro novou sekci jiná, a proto ji musíme nastavit 
	// různé šířky buněk pro tabulku zápatí.
	currentSection->get_HeadersFooters()->LinkToPrevious(false);

	// Pokud chceme pro tuto sekci použít již existující sadu záhlaví/zápatí 
	// ale s některými drobnými úpravami pak může být účelné zkopírovat záhlaví/zápatí
	// z předchozí části a aplikujte potřebné úpravy tam, kde je chceme.
	CopyHeadersFootersFromPreviousSection(currentSection);

	// Najděte zápatí, které chceme změnit.
	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";

	// Uložte výsledný dokument.
	doc->Save(outputPath);
}
Náhled tisku výstupu generovaného ukázkovým kódem

Náhled tisku výstupu generovaného ukázkovým kódem

V předchozí části jste se naučili přidávat záhlaví a zápatí do dokumentů aplikace Word. Podobně jako u přidávání můžete z nadpisu odstranit záhlaví a zápatí, sudé a liché stránky podle vašich potřeb. Následují kroky k odstranění všech záhlaví a zápatí v dokumentu aplikace Word.

Následující ukázkový kód ukazuje, jak odstranit všechna záhlaví a zápatí v dokumentu aplikace Word pomocí C++.

// Cesty zdrojového a výstupního adresáře.
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))
{
	// V sekci jsou možné až tři různá záhlaví a zápatí (pro první, sudé a liché stránky).
	// Všechny zkontrolujeme a odstraníme.
	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ární záhlaví a zápatí se používá pro liché stránky.
	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();
	}
}

// Cesta k výstupnímu souboru
System::String outputPath = outputDataDir + u"RemoveFooters.docx";

// Uložte dokument.
doc->Save(outputPath);

Získejte bezplatnou licenci

Rozhraní API můžete vyzkoušet bez omezení hodnocení tím, že požádáte o bezplatnou dočasnou licenci.

Závěr

Práce se záhlavím a zápatím v dokumentech Wordu je běžným a častým případem použití. V tomto článku jste se naučili pracovat se záhlavím a zápatím v dokumentech aplikace Word pomocí C++. Konkrétně jste se naučili přidávat a odstraňovat záhlaví a zápatí v dokumentech aplikace Word pomocí Aspose.Words for C++ API. Rozhraní API poskytuje spoustu dalších funkcí pro práci s dokumenty Wordu, které můžete podrobně prozkoumat na oficiální dokumentaci. V případě jakýchkoli dotazů nás neváhejte kontaktovat na našem bezplatném fóru podpory.

Viz také