Tambahkan atau Hapus Header dan Footer di Dokumen Word menggunakan C++

Header dan Footer dalam dokumen Word digunakan untuk memformat dan menampilkan informasi penting seperti topik, bab, nomor halaman, Copywrite, dll. Saat bekerja dengan dokumen Word secara terprogram, Anda mungkin perlu menambahkan atau menghapus header dan footer. Untuk itu, artikel ini akan mengajarkan Anda cara menambahkan dan menghapus header dan footer di dokumen Word menggunakan C++.

Untuk menambahkan header dan footer di dokumen Word, kita akan menggunakan Aspose.Words for C++ API. Ini adalah API C++ asli yang mendukung pembuatan, membaca, dan memodifikasi dokumen Word tanpa memerlukan penginstalan Microsoft Word. Anda dapat menginstal API melalui NuGet atau mengunduhnya langsung dari bagian Unduhan.

PM> Install-Package Aspose.Words.Cpp

Header dan footer dalam dokumen Word dibagi menjadi tiga bagian, halaman judul, halaman genap, dan halaman ganjil. Anda dapat menambahkan header dan footer yang berbeda untuk bagian ini. Selain itu, Anda juga dapat menambahkan elemen seperti gambar dan tabel di header dan footer.

Dalam contoh ini, kami akan membuat dokumen Word baru dan menambahkan header berbeda untuk halaman judul. Kami akan menambahkan header dengan gambar dan footer dengan tabel ke halaman berikutnya. Berikut langkah-langkah menambahkan header dan footer pada dokumen Word.

Kode contoh berikut menunjukkan cara menambahkan header dan footer di dokumen Word menggunakan 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()
{
	// Jalur direktori sumber dan keluaran.
	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();

	// Tentukan apakah kita ingin header/footer halaman pertama berbeda dari halaman lain.
	// Anda juga dapat menggunakan properti PageSetup.OddAndEvenPagesHeaderFooter untuk menentukan
	// Header/footer berbeda untuk halaman ganjil dan genap.
	pageSetup->set_DifferentFirstPageHeaderFooter(true);

	// --- Buat tajuk untuk halaman pertama. ---
	pageSetup->set_HeaderDistance(20);
	builder->MoveToHeaderFooter(HeaderFooterType::HeaderFirst);
	builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Center);

	// Setel properti font untuk teks header.
	builder->get_Font()->set_Name(u"Arial");
	builder->get_Font()->set_Bold(true);
	builder->get_Font()->set_Size(14);

	// Tentukan judul tajuk untuk halaman pertama.
	builder->Write(u"Aspose.Words Header/Footer Creation Primer - Title Page.");

	// --- Buat tajuk untuk halaman selain halaman pertama. ---
	pageSetup->set_HeaderDistance(20);
	builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);

	// Masukkan gambar yang benar-benar diposisikan ke sudut atas/kiri header.
	// Jarak dari tepi atas/kiri halaman diatur ke 10 poin.
	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);

	// Tentukan judul tajuk untuk halaman lain.
	builder->Write(u"Aspose.Words Header/Footer Creation Primer.");

	// --- Buat footer untuk halaman selain halaman pertama. ---
	builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);

	// Kami menggunakan tabel dengan dua sel untuk membuat satu bagian teks di baris (dengan penomoran halaman)
	// Diratakan ke kiri, dan bagian teks lainnya (dengan hak cipta) diratakan ke kanan.
	builder->StartTable();

	// Hapus batas tabel.
	builder->get_CellFormat()->ClearFormatting();

	builder->InsertCell();

	// Atur sel pertama menjadi 1/3 dari lebar halaman.
	builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 / 3));

	// Sisipkan teks penomoran halaman di sini.
	// Ini menggunakan bidang PAGE dan NUMPAGES untuk menghitung secara otomatis nomor halaman saat ini dan jumlah total halaman.
	builder->Write(u"Page ");
	builder->InsertField(u"PAGE", u"");
	builder->Write(u" of ");
	builder->InsertField(u"NUMPAGES", u"");

	// Sejajarkan teks ini ke kiri.
	builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Left);

	builder->InsertCell();

	// Atur sel kedua menjadi 2/3 dari lebar halaman.
	builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 * 2 / 3));

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

	// Sejajarkan teks ini ke kanan.
	builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right);

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

	builder->MoveToDocumentEnd();

	// Tambahkan jeda halaman untuk membuat halaman kedua tempat header/footer utama akan terlihat.
	builder->InsertBreak(BreakType::PageBreak);

	// Tambahkan hentian bagian untuk membuat halaman ketiga dengan orientasi halaman berbeda.
	builder->InsertBreak(BreakType::SectionBreakNewPage);

	// Dapatkan bagian baru dan penyiapan halamannya.
	currentSection = builder->get_CurrentSection();
	pageSetup = currentSection->get_PageSetup();

	// Setel orientasi halaman bagian baru ke lanskap.
	pageSetup->set_Orientation(Orientation::Landscape);

	// Bagian ini tidak memerlukan header/footer halaman pertama yang berbeda.
	// Kami hanya membutuhkan satu halaman judul dalam dokumen. Header/footer untuk halaman ini
	// sudah didefinisikan pada bagian sebelumnya
	pageSetup->set_DifferentFirstPageHeaderFooter(false);

	// Bagian ini menampilkan header/footer dari bagian sebelumnya secara default.
	// Panggil currentSection.HeadersFooters.LinkToPrevious(false) untuk membatalkan perilaku ini.
	// Lebar halaman berbeda untuk bagian baru dan oleh karena itu kita perlu mengaturnya 
	// lebar sel yang berbeda untuk tabel footer.
	currentSection->get_HeadersFooters()->LinkToPrevious(false);

	// Jika kita ingin menggunakan set header/footer yang sudah ada untuk bagian ini 
	// tetapi dengan beberapa modifikasi kecil maka mungkin perlu menyalin header/footer
	// dari bagian sebelumnya dan terapkan modifikasi yang diperlukan di tempat yang kita inginkan.
	CopyHeadersFootersFromPreviousSection(currentSection);

	// Temukan footer yang ingin kita ubah.
	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";

	// Simpan dokumen yang dihasilkan.
	doc->Save(outputPath);
}
Pratinjau cetak dari output yang dihasilkan oleh kode sampel

Pratinjau cetak dari output yang dihasilkan oleh kode sampel

Di bagian sebelumnya, Anda telah mempelajari cara menambahkan header dan footer di dokumen Word. Mirip dengan menambahkan, Anda dapat menghapus header dan footer dari judul, halaman genap dan ganjil sesuai kebutuhan Anda. Berikut ini adalah langkah-langkah untuk menghapus semua header dan footer di dokumen Word.

Kode contoh berikut menunjukkan cara menghapus semua header dan footer di dokumen Word menggunakan C++.

// Jalur direktori sumber dan keluaran.
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))
{
	// Hingga tiga header dan footer yang berbeda dimungkinkan dalam satu bagian (untuk halaman pertama, genap, dan ganjil).
	// Kami memeriksa dan menghapus semuanya.
	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 dan footer utama digunakan untuk halaman ganjil.
	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();
	}
}

// Jalur file keluaran
System::String outputPath = outputDataDir + u"RemoveFooters.docx";

// Simpan dokumen.
doc->Save(outputPath);

Dapatkan Lisensi Gratis

Anda dapat mencoba API tanpa batasan evaluasi dengan meminta lisensi sementara gratis.

Kesimpulan

Bekerja dengan header dan footer dalam dokumen Word adalah kasus penggunaan yang umum dan sering. Pada artikel ini, Anda telah mempelajari cara bekerja dengan header dan footer di dokumen Word menggunakan C++. Secara khusus, Anda telah mempelajari cara menambah dan menghapus header dan footer di dokumen Word menggunakan Aspose.Words for C++ API. API menyediakan banyak fitur tambahan untuk bekerja dengan dokumen Word yang dapat Anda jelajahi secara mendetail dengan mengunjungi dokumentasi resmi. Jika ada pertanyaan, jangan ragu untuk menghubungi kami di forum dukungan gratis.

Lihat juga