C++를 사용하여 Word 문서에서 머리글 및 바닥글 추가 또는 제거

Word 문서의 머리글 및 바닥글은 주제, 장, 페이지 번호, 카피라이트 등과 같은 중요한 정보의 서식을 지정하고 표시하는 데 사용됩니다. 프로그래밍 방식으로 Word 문서를 작업하는 동안 머리글과 바닥글을 추가하거나 제거해야 할 수 있습니다. 이를 위해 이 기사에서는 C++를 사용하여 Word 문서에서 머리글과 바닥글을 추가 및 제거하는 방법을 설명합니다.

Word 문서에 머리글과 바닥글을 추가하려면 Aspose.Words for C++ API를 사용합니다. Microsoft Word를 설치하지 않고도 Word 문서를 만들고, 읽고, 수정할 수 있는 네이티브 C++ API입니다. NuGet을 통해 API를 설치하거나 다운로드 섹션에서 직접 다운로드할 수 있습니다.

PM> Install-Package Aspose.Words.Cpp

Word 문서의 머리글과 바닥글은 제목 페이지, 짝수 페이지 및 홀수 페이지의 세 부분으로 나뉩니다. 이러한 섹션에 대해 다른 머리글과 바닥글을 추가할 수 있습니다. 또한 머리글 및 바닥글에 이미지 및 표와 같은 요소를 추가할 수도 있습니다.

이 예에서는 새 Word 문서를 만들고 제목 페이지에 다른 머리글을 추가합니다. 다음 페이지에는 이미지가 있는 머리글과 표가 있는 바닥글을 추가합니다. 다음은 Word 문서에 머리글과 바닥글을 추가하는 단계입니다.

다음 샘플 코드는 C++를 사용하여 Word 문서에 머리글과 바닥글을 추가하는 방법을 보여줍니다.

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()
{
	// 소스 및 출력 디렉토리 경로.
	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();

	// 첫 페이지의 머리글/바닥글을 다른 페이지와 다르게 할지 지정합니다.
	// PageSetup.OddAndEvenPagesHeaderFooter 속성을 사용하여 지정할 수도 있습니다.
	// 홀수 페이지와 짝수 페이지의 머리글/바닥글이 다릅니다.
	pageSetup->set_DifferentFirstPageHeaderFooter(true);

	// --- 첫 페이지의 헤더를 만듭니다. ---
	pageSetup->set_HeaderDistance(20);
	builder->MoveToHeaderFooter(HeaderFooterType::HeaderFirst);
	builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Center);

	// 헤더 텍스트의 글꼴 속성을 설정합니다.
	builder->get_Font()->set_Name(u"Arial");
	builder->get_Font()->set_Bold(true);
	builder->get_Font()->set_Size(14);

	// 첫 페이지의 헤더 제목을 지정합니다.
	builder->Write(u"Aspose.Words Header/Footer Creation Primer - Title Page.");

	// --- 첫 페이지 이외의 페이지에 대한 헤더를 생성합니다. ---
	pageSetup->set_HeaderDistance(20);
	builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);

	// 헤더의 상단/왼쪽 모서리에 절대 위치 이미지를 삽입합니다.
	// 페이지의 상단/왼쪽 가장자리로부터의 거리는 10포인트로 설정됩니다.
	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);

	// 다른 페이지의 헤더 제목을 지정하십시오.
	builder->Write(u"Aspose.Words Header/Footer Creation Primer.");

	// --- 첫 페이지 이외의 페이지에 대한 바닥글을 만듭니다. ---
	builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);

	// 두 개의 셀이 있는 테이블을 사용하여 줄에 있는 텍스트의 한 부분을 만듭니다(페이지 번호 매기기 포함).
	// 왼쪽으로 정렬하고 텍스트의 다른 부분(저작권 포함)을 오른쪽으로 정렬합니다.
	builder->StartTable();

	// 테이블 테두리를 지웁니다.
	builder->get_CellFormat()->ClearFormatting();

	builder->InsertCell();

	// 첫 번째 셀을 페이지 너비의 1/3로 설정합니다.
	builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 / 3));

	// 여기에 페이지 번호 매기기 텍스트를 삽입하십시오.
	// PAGE 및 NUMPAGES 필드를 사용하여 현재 페이지 번호와 총 페이지 수를 자동으로 계산합니다.
	builder->Write(u"Page ");
	builder->InsertField(u"PAGE", u"");
	builder->Write(u" of ");
	builder->InsertField(u"NUMPAGES", u"");

	// 이 텍스트를 왼쪽에 맞춥니다.
	builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Left);

	builder->InsertCell();

	// 두 번째 셀을 페이지 너비의 2/3로 설정합니다.
	builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 * 2 / 3));

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

	// 이 텍스트를 오른쪽에 맞춥니다.
	builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right);

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

	builder->MoveToDocumentEnd();

	// 페이지 나누기를 추가하여 기본 머리글/바닥글이 표시될 두 번째 페이지를 만듭니다.
	builder->InsertBreak(BreakType::PageBreak);

	// 섹션 나누기를 추가하여 페이지 방향이 다른 세 번째 페이지를 만듭니다.
	builder->InsertBreak(BreakType::SectionBreakNewPage);

	// 새 섹션과 페이지 설정을 가져옵니다.
	currentSection = builder->get_CurrentSection();
	pageSetup = currentSection->get_PageSetup();

	// 새 섹션의 페이지 방향을 가로로 설정합니다.
	pageSetup->set_Orientation(Orientation::Landscape);

	// 이 섹션에는 다른 첫 페이지 머리글/바닥글이 필요하지 않습니다.
	// 문서에는 제목 페이지가 하나만 필요합니다. 이 페이지의 머리글/바닥글
	// 이전 섹션에서 이미 정의되었습니다.
	pageSetup->set_DifferentFirstPageHeaderFooter(false);

	// 이 섹션은 기본적으로 이전 섹션의 머리글/바닥글을 표시합니다.
	// 이 동작을 취소하려면 currentSection.HeadersFooters.LinkToPrevious(false)를 호출하세요.
	// 페이지 너비는 새 섹션에 대해 다르므로 다음을 설정해야 합니다. 
	// 바닥글 테이블의 다른 셀 너비.
	currentSection->get_HeadersFooters()->LinkToPrevious(false);

	// 이 섹션에 이미 존재하는 머리글/바닥글 세트를 사용하려면 
	// 그러나 약간의 수정을 가하면 머리글/바닥글을 복사하는 것이 편리할 수 있습니다.
	// 이전 섹션에서 원하는 대로 필요한 수정 사항을 적용합니다.
	CopyHeadersFootersFromPreviousSection(currentSection);

	// 변경하려는 바닥글을 찾습니다.
	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";

	// 결과 문서를 저장합니다.
	doc->Save(outputPath);
}
샘플 코드에서 생성된 출력의 인쇄 미리보기

샘플 코드에서 생성된 출력의 인쇄 미리보기

이전 섹션에서는 Word 문서에 머리글과 바닥글을 추가하는 방법을 배웠습니다. 추가와 마찬가지로 필요에 따라 제목, 짝수 및 홀수 페이지에서 머리글과 바닥글을 제거할 수 있습니다. 다음은 Word 문서의 모든 머리글과 바닥글을 삭제하는 단계입니다.

다음 샘플 코드는 C++를 사용하여 Word 문서의 모든 머리글과 바닥글을 삭제하는 방법을 보여줍니다.

// 소스 및 출력 디렉토리 경로.
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))
{
	// 한 섹션에 최대 3개의 서로 다른 머리글과 바닥글을 사용할 수 있습니다(첫 번째, 짝수 및 홀수 페이지의 경우).
	// 모두 확인하고 삭제합니다.
	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 = 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();
	}
}

// 출력 파일 경로
System::String outputPath = outputDataDir + u"RemoveFooters.docx";

// 문서를 저장합니다.
doc->Save(outputPath);

무료 라이선스 받기

임시 무료 라이선스를 요청하면 평가 제한 없이 API를 사용해 볼 수 있습니다.

결론

Word 문서에서 머리글과 바닥글로 작업하는 것은 일반적이고 자주 사용되는 사용 사례입니다. 이 기사에서는 C++를 사용하여 Word 문서에서 머리글과 바닥글을 사용하는 방법을 배웠습니다. 특히, Aspose.Words for C++ API를 사용하여 Word 문서에서 머리글과 바닥글을 추가하고 제거하는 방법을 배웠습니다. API는 공식 문서를 방문하여 자세히 탐색할 수 있는 Word 문서 작업을 위한 많은 추가 기능을 제공합니다. 질문이 있는 경우 무료 지원 포럼을 통해 언제든지 문의하십시오.

또한보십시오