C++ Kullanarak Word Belgelerinde Üstbilgi ve Altbilgi Ekleme veya Kaldırma

Word belgelerindeki Üstbilgiler ve Altbilgiler, konu, bölüm, sayfa numarası, Copywrite vb. gibi önemli bilgileri biçimlendirmek ve göstermek için kullanılır. Word belgeleriyle programlı olarak çalışırken, üstbilgiler ve altbilgiler eklemeniz veya kaldırmanız gerekebilir. Bu amaçla, bu makale size C++ kullanarak Word belgelerinde üst bilgileri ve alt bilgileri nasıl ekleyeceğinizi ve kaldıracağınızı öğretecektir.

Word belgelerine üst bilgiler ve alt bilgiler eklemek için Aspose.Words for C++ API’sini kullanacağız. Microsoft Word’ün yüklenmesini gerektirmeden Word belgeleri oluşturmayı, okumayı ve değiştirmeyi destekleyen yerel bir C++ API’sidir. API’yi NuGet aracılığıyla yükleyebilir veya doğrudan İndirilenler bölümünden indirebilirsiniz.

PM> Install-Package Aspose.Words.Cpp

Bir Word belgesindeki üst bilgiler ve alt bilgiler, başlık sayfası, çift sayfalar ve tek sayfalar olmak üzere üç bölüme ayrılır. Bu bölümler için farklı üstbilgiler ve altbilgiler ekleyebilirsiniz. Ek olarak, üstbilgilere ve altbilgilere resimler ve tablolar gibi öğeler de ekleyebilirsiniz.

Bu örnekte, yeni bir Word belgesi oluşturacağız ve başlık sayfası için farklı bir başlık ekleyeceğiz. Sonraki sayfalara resimli bir üst bilgi ve tablolu bir alt bilgi ekleyeceğiz. Word belgelerine üst bilgi ve alt bilgi ekleme adımları aşağıdadır.

Aşağıdaki örnek kod, C++ kullanarak Word belgelerine üst bilgilerin ve alt bilgilerin nasıl ekleneceğini gösterir.

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()
{
	// Kaynak ve çıktı dizini yolları.
	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();

	// İlk sayfanın üstbilgilerinin/altbilgilerinin diğer sayfalardan farklı olmasını isteyip istemediğimizi belirtin.
	// Belirtmek için PageSetup.OddAndEvenPagesHeaderFooter özelliğini de kullanabilirsiniz.
	// Tek ve çift sayfalar için farklı üst bilgiler/alt bilgiler.
	pageSetup->set_DifferentFirstPageHeaderFooter(true);

	// --- İlk sayfa için başlık oluşturun. ---
	pageSetup->set_HeaderDistance(20);
	builder->MoveToHeaderFooter(HeaderFooterType::HeaderFirst);
	builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Center);

	// Başlık metni için yazı tipi özelliklerini ayarlayın.
	builder->get_Font()->set_Name(u"Arial");
	builder->get_Font()->set_Bold(true);
	builder->get_Font()->set_Size(14);

	// İlk sayfa için başlık başlığını belirtin.
	builder->Write(u"Aspose.Words Header/Footer Creation Primer - Title Page.");

	// --- İlk sayfa dışındaki sayfalar için başlık oluşturun. ---
	pageSetup->set_HeaderDistance(20);
	builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);

	// Başlığın üst/sol köşesine kesinlikle konumlandırılmış görüntü ekleyin.
	// Sayfanın üst/sol kenarlarından uzaklık 10 punto olarak ayarlanmıştır.
	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);

	// Diğer sayfalar için başlık başlığı belirtin.
	builder->Write(u"Aspose.Words Header/Footer Creation Primer.");

	// --- İlk sayfa dışındaki sayfalar için altbilgi oluşturun. ---
	builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);

	// Satırdaki metnin bir bölümünü yapmak için iki hücreli tablo kullanıyoruz (sayfa numaralandırmalı)
	// Sola hizalanacak ve metnin diğer kısmı (telif hakkı ile) sağa hizalanacak.
	builder->StartTable();

	// Tablo kenarlıklarını temizleyin.
	builder->get_CellFormat()->ClearFormatting();

	builder->InsertCell();

	// İlk hücreyi sayfa genişliğinin 1/3'üne ayarlayın.
	builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 / 3));

	// Sayfa numaralandırma metnini buraya ekleyin.
	// Geçerli sayfa numarasını ve toplam sayfa sayısını otomatik olarak hesaplamak için PAGE ve NUMPAGES alanlarını kullanır.
	builder->Write(u"Page ");
	builder->InsertField(u"PAGE", u"");
	builder->Write(u" of ");
	builder->InsertField(u"NUMPAGES", u"");

	// Bu metni sola hizalayın.
	builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Left);

	builder->InsertCell();

	// İkinci hücreyi sayfa genişliğinin 2/3'ü olarak ayarlayın.
	builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 * 2 / 3));

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

	// Bu metni sağa hizalayın.
	builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right);

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

	builder->MoveToDocumentEnd();

	// Birincil üstbilgilerin/altbilgilerin görüleceği ikinci bir sayfa oluşturmak için bir sayfa sonu ekleyin.
	builder->InsertBreak(BreakType::PageBreak);

	// Farklı sayfa yönüne sahip üçüncü bir sayfa oluşturmak için bir bölüm sonu ekleyin.
	builder->InsertBreak(BreakType::SectionBreakNewPage);

	// Yeni bölümü ve sayfa düzenini edinin.
	currentSection = builder->get_CurrentSection();
	pageSetup = currentSection->get_PageSetup();

	// Yeni bölümün sayfa yönlendirmesini yatay olarak ayarlayın.
	pageSetup->set_Orientation(Orientation::Landscape);

	// Bu bölüm farklı ilk sayfa üst bilgisine/alt bilgisine ihtiyaç duymaz.
	// Belgede yalnızca bir başlık sayfasına ihtiyacımız var. Bu sayfanın üstbilgisi/altbilgisi
	// önceki bölümde zaten tanımlanmıştı
	pageSetup->set_DifferentFirstPageHeaderFooter(false);

	// Bu bölüm, varsayılan olarak önceki bölümden üstbilgileri/altbilgileri görüntüler.
	// Bu davranışı iptal etmek için currentSection.HeadersFooters.LinkToPrevious(false) öğesini çağırın.
	// Yeni bölüm için sayfa genişliği farklıdır ve bu nedenle ayarlamamız gerekir. 
	// altbilgi tablosu için farklı hücre genişlikleri.
	currentSection->get_HeadersFooters()->LinkToPrevious(false);

	// Bu bölüm için zaten var olan üstbilgi/altbilgi setini kullanmak istiyorsak 
	// ancak bazı küçük değişikliklerle üstbilgileri/altbilgileri kopyalamak uygun olabilir
	// önceki bölümden ve istediğimiz yerde gerekli değişiklikleri uygulayın.
	CopyHeadersFootersFromPreviousSection(currentSection);

	// Değiştirmek istediğimiz altbilgiyi bulun.
	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";

	// Ortaya çıkan belgeyi kaydedin.
	doc->Save(outputPath);
}
Örnek kod tarafından oluşturulan çıktının baskı önizlemesi

Örnek kod tarafından oluşturulan çıktının baskı önizlemesi

Önceki bölümde, Word belgelerine üstbilgi ve altbilgi eklemeyi öğrendiniz. Eklemeye benzer şekilde, ihtiyaçlarınıza göre başlık, çift ve tek sayfalardan üstbilgileri ve altbilgileri kaldırabilirsiniz. Aşağıda, bir Word belgesindeki tüm üstbilgileri ve altbilgileri silme adımları verilmiştir.

Aşağıdaki örnek kod, C++ kullanarak bir Word belgesindeki tüm üstbilgilerin ve altbilgilerin nasıl silineceğini gösterir.

// Kaynak ve çıktı dizini yolları.
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))
{
	// Bir bölümde en fazla üç farklı üst bilgi ve alt bilgi mümkündür (ilk, çift ve tek sayfalar için).
	// Hepsini kontrol edip siliyoruz.
	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();
	}

	// Tek sayfalar için birincil üstbilgi ve altbilgi kullanılır.
	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();
	}
}

// Çıktı dosyası yolu
System::String outputPath = outputDataDir + u"RemoveFooters.docx";

// Belgeyi kaydedin.
doc->Save(outputPath);

Ücretsiz Lisans Alın

Ücretsiz bir geçici lisans talep ederek değerlendirme sınırlamaları olmadan API’yi deneyebilirsiniz.

Çözüm

Word belgelerinde üstbilgiler ve altbilgilerle çalışmak yaygın ve sık kullanılan bir durumdur. Bu makalede, C++ kullanarak Word belgelerinde üst bilgiler ve alt bilgilerle nasıl çalışacağınızı öğrendiniz. Özellikle, Aspose.Words for C++ API kullanarak Word belgelerinde üst bilgileri ve alt bilgileri nasıl ekleyeceğinizi ve kaldıracağınızı öğrendiniz. API, Word belgeleriyle çalışmak için resmi belgeleri ziyaret ederek ayrıntılı olarak keşfedebileceğiniz bir dizi ek özellik sağlar. Herhangi bir sorunuz olursa lütfen ücretsiz destek forumumuzda bize ulaşmaktan çekinmeyin.

Ayrıca bakınız