Word 문서의 머리글 및 바닥글은 주제, 장, 페이지 번호, 카피라이트 등과 같은 중요한 정보의 서식을 지정하고 표시하는 데 사용됩니다. 프로그래밍 방식으로 Word 문서를 작업하는 동안 머리글과 바닥글을 추가하거나 제거해야 할 수 있습니다. 이를 위해 이 기사에서는 C++를 사용하여 Word 문서에서 머리글과 바닥글을 추가 및 제거하는 방법을 설명합니다.
- Word 문서에서 머리글 및 바닥글 추가 및 제거를 위한 C++ API
- C++를 사용하여 Word 문서에 머리글 및 바닥글 추가
- C++를 사용하여 Word 문서에서 머리글 및 바닥글 삭제
Word 문서에서 머리글 및 바닥글 추가 및 제거를 위한 C++ API
Word 문서에 머리글과 바닥글을 추가하려면 Aspose.Words for C++ API를 사용합니다. Microsoft Word를 설치하지 않고도 Word 문서를 만들고, 읽고, 수정할 수 있는 네이티브 C++ API입니다. NuGet을 통해 API를 설치하거나 다운로드 섹션에서 직접 다운로드할 수 있습니다.
PM> Install-Package Aspose.Words.Cpp
C++를 사용하여 Word 문서에 머리글 및 바닥글 추가
Word 문서의 머리글과 바닥글은 제목 페이지, 짝수 페이지 및 홀수 페이지의 세 부분으로 나뉩니다. 이러한 섹션에 대해 다른 머리글과 바닥글을 추가할 수 있습니다. 또한 머리글 및 바닥글에 이미지 및 표와 같은 요소를 추가할 수도 있습니다.
이 예에서는 새 Word 문서를 만들고 제목 페이지에 다른 머리글을 추가합니다. 다음 페이지에는 이미지가 있는 머리글과 표가 있는 바닥글을 추가합니다. 다음은 Word 문서에 머리글과 바닥글을 추가하는 단계입니다.
- Word 문서를 나타내는 Document 클래스의 인스턴스를 만듭니다.
- 이전에 생성한 Document 객체를 사용하여 DocumentBuilder 클래스의 인스턴스를 생성합니다.
- PageSetup->set_DifferentFirstPageHeaderFooter(bool value) 메서드를 사용하여 제목 페이지에 다른 머리글과 바닥글을 사용하도록 지정합니다.
- 헤더 텍스트의 글꼴 속성을 설정합니다.
- 다음 페이지의 머리글과 바닥글을 만듭니다.
- DocumentBuilder->InsertImage(System::SharedPtr)를 사용하여 헤더에 이미지를 추가합니다.System::Drawing::Image 이미지, Aspose::Words::Drawing::RelativeHorizontalPosition horzPos, 이중 왼쪽, Aspose::Words::Drawing::RelativeVerticalPosition vertPos, 이중 상단, 이중 너비, 이중 높이, Aspose::Words::Drawing::WrapType wrapType) 방법.
- 바닥글에 표를 추가합니다.
- Document->Save(System::String fileName) 메서드를 사용하여 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);
}
C++를 사용하여 Word 문서에서 머리글 및 바닥글 삭제
이전 섹션에서는 Word 문서에 머리글과 바닥글을 추가하는 방법을 배웠습니다. 추가와 마찬가지로 필요에 따라 제목, 짝수 및 홀수 페이지에서 머리글과 바닥글을 제거할 수 있습니다. 다음은 Word 문서의 모든 머리글과 바닥글을 삭제하는 단계입니다.
- Document 클래스를 사용하여 Word 문서를 로드합니다.
- 머리글과 바닥글을 나타내는 HeaderFooter 클래스의 두 인스턴스를 만듭니다.
- Section->get_HeadersFooters()->idx\get(Aspose::Words::HeaderFooterType headerFooterType) 메서드를 사용하여 제목, 짝수 및 홀수 페이지의 머리글과 바닥글을 검색합니다.
- HeaderFooter->Remove() 메서드를 사용하여 머리글과 바닥글을 제거합니다.
- Document->Save(System::String fileName) 메서드를 사용하여 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 문서 작업을 위한 많은 추가 기능을 제공합니다. 질문이 있는 경우 무료 지원 포럼을 통해 언제든지 문의하십시오.