اضافه کردن یا حذف سربرگ و پاورقی در اسناد Word با استفاده از ++C

سرصفحه ها و پاورقی ها در اسناد Word برای قالب بندی و نمایش اطلاعات مهم مانند موضوع، فصل، شماره صفحه، کپی رایت و غیره استفاده می شوند. در حین کار با اسناد Word به صورت برنامه ای، ممکن است لازم باشد سرصفحه ها و پاورقی ها را اضافه یا حذف کنید. برای این منظور، این مقاله به شما آموزش می دهد که چگونه با استفاده از C++ سرصفحه و پاورقی را در اسناد Word اضافه و حذف کنید.

برای افزودن سرصفحه و پاورقی در اسناد Word، از API Aspose.Words for C++ استفاده می کنیم. این یک API بومی C++ است که از ایجاد، خواندن و اصلاح اسناد Word بدون نیاز به نصب Microsoft Word پشتیبانی می کند. می‌توانید API را از طریق NuGet نصب کنید یا آن را مستقیماً از بخش Downloads دانلود کنید.

PM> Install-Package Aspose.Words.Cpp

سرصفحه ها و پاورقی ها در یک سند Word به سه بخش، صفحه عنوان، صفحات زوج و صفحات فرد تقسیم می شوند. می توانید سرصفحه ها و پاورقی های مختلفی را برای این بخش ها اضافه کنید. علاوه بر این، شما همچنین می توانید عناصری مانند تصاویر و جداول را در سرصفحه ها و پاورقی ها اضافه کنید.

در این مثال، ما یک سند Word جدید ایجاد می کنیم و یک هدر متفاوت برای صفحه عنوان اضافه می کنیم. یک هدر با تصویر و یک پاورقی با جدول به صفحات بعدی اضافه می کنیم. مراحل زیر برای افزودن سرصفحه و پاورقی در اسناد Word آمده است.

کد نمونه زیر نحوه افزودن سرصفحه و پاورقی در اسناد 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 (نادرست) را فراخوانی کنید.
	// عرض صفحه برای بخش جدید متفاوت است و بنابراین باید تنظیم کنیم 
	// عرض سلول های مختلف برای جدول پاورقی
	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 را بدون محدودیت ارزیابی امتحان کنید.

نتیجه

کار با هدرها و پاورقی ها در اسناد Word یک مورد رایج و مکرر است. در این مقاله نحوه کار با هدر و پاورقی در اسناد Word با استفاده از C++ را یاد گرفتید. به طور خاص، شما یاد گرفته اید که چگونه با استفاده از Aspose.Words for C++ API در اسناد Word اضافه و حذف کنید. API مجموعه‌ای از ویژگی‌های اضافی را برای کار با اسناد Word ارائه می‌کند که می‌توانید با مراجعه به مستندات رسمی جزئیات را بررسی کنید. در صورت وجود هرگونه سوال، لطفاً در [تالار گفتمان پشتیبانی رایگان17 ما با ما تماس بگیرید.

همچنین ببینید