הוסף או הסר כותרת עליונה ותחתונה במסמכי Word באמצעות C++

כותרות עליונות ותחתונות במסמכי Word משמשות לעיצוב ולהצגה של מידע חשוב כגון הנושא, הפרק, מספר העמוד, Copywrite וכו’. במהלך העבודה עם מסמכי Word באופן תוכנתי, ייתכן שיהיה עליך להוסיף או להסיר כותרות עליונות ותחתונות. לשם כך, מאמר זה ילמד אותך כיצד להוסיף ולהסיר כותרות עליונות ותחתונות במסמכי Word באמצעות C++.

כדי להוסיף כותרות עליונות ותחתונות במסמכי Word, נשתמש ב-Aspose.Words for C++ API. זהו API מקורי של C++ התומך ביצירה, קריאה ושינוי של מסמכי Word מבלי לדרוש התקנה של Microsoft Word. אתה יכול להתקין את ה-API דרך NuGet או להוריד אותו ישירות מהקטע הורדות.

PM> Install-Package Aspose.Words.Cpp

הכותרות העליונות והתחתונות במסמך Word מחולקות לשלושה חלקים, עמוד השער, עמודים זוגיים ודפים אי-זוגיים. אתה יכול להוסיף כותרות עליונות ותחתונות שונות עבור מקטעים אלה. בנוסף, אתה יכול גם להוסיף אלמנטים כמו תמונות וטבלאות בכותרות עליונות ותחתונות.

בדוגמה זו, ניצור מסמך Word חדש ונוסיף כותרת אחרת עבור עמוד השער. נוסיף כותרת עליונה עם תמונה וכותרת תחתונה עם טבלה לעמודים הבאים. להלן השלבים להוספת כותרות עליונות ותחתונות במסמכי Word.

  • צור מופע של המחלקה Document כדי לייצג את מסמך Word.
  • צור מופע של המחלקה DocumentBuilder באמצעות האובייקט Document שנוצר בעבר.
  • ציין שאתה רוצה כותרת עליונה ותחתונה שונה עבור עמוד השער באמצעות השיטה PageSetup->setDifferentFirstPageHeaderFooter(bool value).
  • הגדר את מאפייני הגופן עבור טקסט הכותרת.
  • צור את הכותרת העליונה והתחתונה עבור הדפים הבאים.
  • הוסף תמונה בכותרת באמצעות [DocumentBuilder->InsertImage(System::SharedPtrSystem::Drawing::Image תמונה, Aspose::Words::Drawing::RelativeHorizontalPosition horzPos, כפול שמאלה, Aspose::Words::Drawing::RelativeVerticalPosition vertPos, כפול עליון, רוחב כפול, גובה כפול, Aspose::Words::Drawing::WrapType wrapType) שיטת 8.
  • הוסף טבלה בכותרת התחתונה.
  • שמור את מסמך Word באמצעות השיטה מסמך->שמור(System::String fileName).

הקוד לדוגמה הבא מדגים כיצד להוסיף כותרות עליונות ותחתונות במסמכי Word באמצעות 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()
{
	// נתיבי ספריית מקור ופלט.
	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.

הקוד לדוגמה הבא מראה כיצד למחוק את כל הכותרות העליונות והתחתונות במסמך Word באמצעות C++.

// נתיבי ספריית מקור ופלט.
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))
{
	// עד שלוש כותרות עליונות ותחתונות שונות אפשריות בקטע (עבור עמודים ראשונים, זוגיים ואי-זוגיים).
	// אנחנו בודקים ומוחקים את כולם.
	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 ללא מגבלות הערכה על ידי בקשת [רישיון זמני בחינם].15

סיכום

עבודה עם כותרות עליונות ותחתונות במסמכי Word היא מקרה שימוש נפוץ ותכוף. במאמר זה, למדת כיצד לעבוד עם כותרות עליונות ותחתונות במסמכי Word באמצעות C++. באופן ספציפי, למדת כיצד להוסיף ולהסיר כותרות עליונות ותחתונות במסמכי Word באמצעות Aspose.Words for C++ API. ה-API מספק חבורה של תכונות נוספות לעבודה עם מסמכי Word שתוכל לחקור בפירוט על ידי ביקור בתיעוד הרשמי. בכל שאלה, אנא אל תהסס לפנות אלינו בפורום התמיכה החינמי שלנו.

ראה גם