Thêm hoặc Loại bỏ Đầu trang và Chân trang trong Tài liệu Word bằng C ++

Đầu trang và Chân trang trong tài liệu Word được sử dụng để định dạng và hiển thị thông tin quan trọng như chủ đề, chương, số trang, Copywrite, v.v. Trong khi làm việc với tài liệu Word theo chương trình, bạn có thể cần thêm hoặc xóa đầu trang và chân trang. Để kết thúc, bài viết này sẽ hướng dẫn bạn cách thêm và xóa đầu trang và chân trang trong tài liệu Word bằng C ++.

Để thêm đầu trang và chân trang trong tài liệu Word, chúng tôi sẽ sử dụng API Aspose.Words for C ++. Đây là một API C ++ gốc hỗ trợ tạo, đọc và sửa đổi tài liệu Word mà không yêu cầu cài đặt Microsoft Word. Bạn có thể cài đặt API thông qua NuGet hoặc tải xuống trực tiếp từ phần Tải xuống.

PM> Install-Package Aspose.Words.Cpp

Đầu trang và chân trang trong tài liệu Word được chia thành ba phần, trang tiêu đề, trang chẵn và trang lẻ. Bạn có thể thêm các đầu trang và chân trang khác nhau cho các phần này. Ngoài ra, bạn cũng có thể thêm các phần tử như hình ảnh và bảng trong đầu trang và chân trang.

Trong ví dụ này, chúng tôi sẽ tạo một tài liệu Word mới và thêm một tiêu đề khác cho trang tiêu đề. Chúng tôi sẽ thêm đầu trang có hình ảnh và chân trang có bảng vào các trang tiếp theo. Sau đây là các bước để thêm đầu trang và chân trang trong tài liệu Word.

  • Tạo một thể hiện của lớp Document để đại diện cho tài liệu Word.
  • Tạo một thể hiện của lớp DocumentBuilder bằng cách sử dụng đối tượng Document đã tạo trước đó.
  • Chỉ định rằng bạn muốn có một đầu trang và chân trang khác cho trang tiêu đề bằng cách sử dụng phương thức PageSetup-> setDiosystemFirstPageHeaderFooter (bool value).
  • Đặt thuộc tính phông chữ cho văn bản tiêu đề.
  • Tạo đầu trang và chân trang cho các trang tiếp theo.
  • Thêm hình ảnh vào tiêu đề bằng cách sử dụng DocumentBuilder-> InsertImage (System :: SharedPtrSystem::Drawing::Image image, Aspose :: Words :: Drawing :: RelativeHoriz ngangPosition horzPos, gấp đôi bên trái, Aspose :: Words :: Drawing :: RelativeVerticalPosition vertPos, đỉnh gấp đôi, chiều rộng gấp đôi, chiều cao gấp đôi, Aspose :: Words :: Drawing :: WrapType wrapType) phương pháp.
  • Thêm bảng ở chân trang.
  • Lưu tài liệu Word bằng phương pháp Document-> Save (System :: String fileName).

Đoạn mã mẫu sau đây trình bày cách thêm đầu trang và chân trang trong tài liệu Word bằng 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()
{
	// Đường dẫn thư mục nguồn và đầu ra.
	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();

	// Chỉ định nếu chúng ta muốn đầu trang / chân trang của trang đầu tiên khác với các trang khác.
	// Bạn cũng có thể sử dụng thuộc tính PageSetup.OddAndEvenPagesHeaderFooter để chỉ định
	// Các đầu trang / chân trang khác nhau cho các trang chẵn và lẻ.
	pageSetup->set_DifferentFirstPageHeaderFooter(true);

	// --- Tạo tiêu đề cho trang đầu tiên. ---
	pageSetup->set_HeaderDistance(20);
	builder->MoveToHeaderFooter(HeaderFooterType::HeaderFirst);
	builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Center);

	// Đặt thuộc tính phông chữ cho văn bản tiêu đề.
	builder->get_Font()->set_Name(u"Arial");
	builder->get_Font()->set_Bold(true);
	builder->get_Font()->set_Size(14);

	// Chỉ định tiêu đề đầu trang cho trang đầu tiên.
	builder->Write(u"Aspose.Words Header/Footer Creation Primer - Title Page.");

	// --- Tạo tiêu đề cho các trang khác với trang đầu tiên. ---
	pageSetup->set_HeaderDistance(20);
	builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);

	// Chèn hình ảnh được định vị tuyệt đối vào góc trên / bên trái của tiêu đề.
	// Khoảng cách từ các cạnh trên / trái của trang được đặt thành 10 điểm.
	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);

	// Chỉ định tiêu đề đầu trang cho các trang khác.
	builder->Write(u"Aspose.Words Header/Footer Creation Primer.");

	// --- Tạo footer cho các trang khác với trang đầu tiên. ---
	builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);

	// Chúng tôi sử dụng bảng có hai ô để tạo một phần của văn bản trên dòng (có đánh số trang)
	// Để được căn trái và phần khác của văn bản (có bản quyền) được căn phải.
	builder->StartTable();

	// Đường viền bảng rõ ràng.
	builder->get_CellFormat()->ClearFormatting();

	builder->InsertCell();

	// Đặt ô đầu tiên bằng 1/3 chiều rộng trang.
	builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 / 3));

	// Chèn văn bản đánh số trang tại đây.
	// Nó sử dụng các trường PAGE và NUMPAGES để tự động tính số trang hiện tại và tổng số trang.
	builder->Write(u"Page ");
	builder->InsertField(u"PAGE", u"");
	builder->Write(u" of ");
	builder->InsertField(u"NUMPAGES", u"");

	// Căn chỉnh văn bản này sang bên trái.
	builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Left);

	builder->InsertCell();

	// Đặt ô thứ hai bằng 2/3 chiều rộng trang.
	builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 * 2 / 3));

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

	// Căn chỉnh văn bản này sang bên phải.
	builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right);

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

	builder->MoveToDocumentEnd();

	// Thêm dấu ngắt trang để tạo trang thứ hai mà trên đó các đầu trang / chân trang chính sẽ được nhìn thấy.
	builder->InsertBreak(BreakType::PageBreak);

	// Thêm dấu ngắt phần để tạo trang thứ ba với hướng trang khác.
	builder->InsertBreak(BreakType::SectionBreakNewPage);

	// Nhận phần mới và thiết lập trang của nó.
	currentSection = builder->get_CurrentSection();
	pageSetup = currentSection->get_PageSetup();

	// Đặt hướng trang của phần mới thành nằm ngang.
	pageSetup->set_Orientation(Orientation::Landscape);

	// Phần này không cần đầu trang / chân trang đầu tiên khác nhau.
	// Chúng tôi chỉ cần một trang tiêu đề trong tài liệu. Đầu trang / chân trang cho trang này
	// đã được xác định trong phần trước
	pageSetup->set_DifferentFirstPageHeaderFooter(false);

	// Phần này hiển thị đầu trang / chân trang từ phần trước theo mặc định.
	// Gọi currentSection.HeadersFooters.LinkToPrevious (false) để hủy hành vi này.
	// Chiều rộng trang khác nhau đối với phần mới và do đó chúng tôi cần đặt 
	// các độ rộng ô khác nhau cho bảng chân trang.
	currentSection->get_HeadersFooters()->LinkToPrevious(false);

	// Nếu chúng ta muốn sử dụng bộ đầu trang / chân trang đã có cho phần này 
	// nhưng với một số sửa đổi nhỏ thì có thể sao chép đầu trang / chân trang
	// từ phần trước và áp dụng các sửa đổi cần thiết khi chúng tôi muốn.
	CopyHeadersFootersFromPreviousSection(currentSection);

	// Tìm chân trang mà chúng tôi muốn thay đổi.
	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";

	// Lưu tài liệu kết quả.
	doc->Save(outputPath);
}
Bản xem trước bản in của đầu ra được tạo bởi mã mẫu

Bản xem trước bản in của đầu ra được tạo bởi mã mẫu

Trong phần trước, bạn đã biết cách thêm đầu trang và chân trang trong tài liệu Word. Tương tự như thêm, bạn có thể loại bỏ đầu trang và chân trang khỏi tiêu đề, trang chẵn và trang lẻ tùy theo nhu cầu của bạn. Sau đây là các bước để xóa tất cả đầu trang và chân trang trong tài liệu Word.

Mã mẫu sau đây cho thấy cách xóa tất cả đầu trang và chân trang trong tài liệu Word bằng C ++.

// Đường dẫn thư mục nguồn và đầu ra.
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))
{
	// Có thể có tối đa ba đầu trang và chân trang khác nhau trong một phần (đối với trang đầu tiên, trang chẵn và trang lẻ).
	// Chúng tôi kiểm tra và xóa tất cả chúng.
	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();
	}

	// Đầu trang và chân trang chính được sử dụng cho các trang lẻ.
	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();
	}
}

// Đường dẫn tệp đầu ra
System::String outputPath = outputDataDir + u"RemoveFooters.docx";

// Lưu tài liệu.
doc->Save(outputPath);

Nhận giấy phép miễn phí

Bạn có thể dùng thử API mà không có giới hạn đánh giá bằng cách yêu cầu giấy phép tạm thời miễn phí.

Sự kết luận

Làm việc với đầu trang và chân trang trong tài liệu Word là một trường hợp sử dụng phổ biến và thường xuyên. Trong bài viết này, bạn đã học cách làm việc với đầu trang và chân trang trong tài liệu Word bằng C ++. Cụ thể, bạn đã học cách thêm và xóa đầu trang và chân trang trong tài liệu Word bằng cách sử dụng API Aspose.Words for C ++. API cung cấp một loạt các tính năng bổ sung để làm việc với tài liệu Word mà bạn có thể khám phá chi tiết bằng cách truy cập tài liệu chính thức. Trong trường hợp có bất kỳ câu hỏi nào, vui lòng liên hệ với chúng tôi trên diễn đàn hỗ trợ miễn phí của chúng tôi.

Xem thêm