إضافة نص إلى ملفات PS
حل واجهة برمجة تطبيقات C++ للعمل مع نصوص ملفات PS
PostScript، وهي لغة قوية لوصف الصفحات، توفر تحكماً دقيقاً في وضع النص وتنسيقه. فيما يلي بعض الفروق الدقيقة الرئيسية التي يجب مراعاتها عند العمل مع النص في PostScript:
- يسمح لك PostScript بتحديد الخطوط باستخدام أسماء PostScript الخاصة بها. غالباً ما تتوفر الخطوط الشائعة مثل Times Roman و Helvetica و Courier بشكل افتراضي. لضمان عرض ثابت عبر الأنظمة المختلفة، يمكنك تضمين الخطوط مباشرة في ملف PostScript الخاص بك. هذا مهم بشكل خاص للخطوط المخصصة أو عائلات الخطوط الأقل شيوعاً.
- حجم الخط ونمطه - يحدد معامل
fontsizeحجم الخط بالنقاط. لتعديل أنماط الخطوط، استخدم معاملات مثلsetfontالذي يحدد الخط العريض أو المائل أو الاختلافات الأخرى. - وضع النص - يضع معامل
movetoمؤشر النص عند نقطة محددة في الصفحة. بينما لا يحتوي PostScript على معاملات محاذاة مباشرة، يمكنك تحقيق المحاذاة من خلال الحساب الدقيق. - تدوير النص وتغيير حجمه - يمكن استخدام معامل
rotateلتدوير النص بزاوية محددة، ويمكن استخدام معاملscaleلتكبير النص أو تصغيره. - عرض النص - يدعم PostScript صقل الحواف، مما ينعم حواف النص لتحسين القراءة. يمكنك أيضاً التحكم في التباعد بين الأحرف (kerning) والأسطر (leading) لضبط مظهر النص بدقة.
يمكن أن يساعد فهم هذه الجوانب في ضمان الاستخدام السليم للخط والعرض الثابت في سير عمل PostScript. ولكن مهما كان الأمر، - توفر لك Aspose.Page الوظيفة اللازمة لإدارة خطوط ملفات PS بسهولة. باستخدام واجهة برمجة التطبيقات هذه، يمكنك إضافة نصوص بألوان وفرش مختلفة باستخدام خطوط مخصصة أو خطوط النظام. لمعرفة المزيد حول كيفية التعامل مع ملفات PS و كيفية العمل مع نصوص ملفات PS بشكل خاص، يرجى اتباع الوثائق.
لإدراج نصوص في مستندات PS، نحتاج إلى:
واجهة برمجة تطبيقات Aspose.Page لـ C++ وهي واجهة برمجة تطبيقات قوية وغنية بالميزات وسهلة الاستخدام لمعالجة المستندات وتحويلها في C++.
افتح مدير حزم NuGet، وابحث عن Aspose.Page.Cpp وقم بالتثبيت. يمكنك أيضاً استخدام الأمر التالي من وحدة تحكم مدير الحزم.
Package Manager Console Command
PM> Install-Package Aspose.Page.Cpp
خطوات إضافة نص إلى ملف PS.
يوضح مقتطف التعليمات البرمجية أدناه كيفية إضافة نص باستخدام سلسلة Unicode إلى مستند PostScript (PS) باستخدام مكتبة Aspose.Page في C#. لمشاهدة نسخة كاملة من المثال ومزيد من الأمثلة، انتقل إلى مشروع Aspose.Page لـ C++ على GitHub .
- قم بتهيئة متغير dataDir بمسار المجلد الذي يحتوي على المستندات.
- اضبط المتغير FONTS_FOLDER على مسار المجلد الذي يحتوي على الخطوط اللازمة.
- أنشئ تدفق إخراج لمستند PostScript باستخدام فئة FileStream.
- حدد خيارات الحفظ لمستند PostScript باستخدام كائن PsSaveOptions .
- يتم ضبط خاصية AdditionalFontsFolders لكائن الخيارات على مصفوفة تحتوي على المسار إلى FONTS_FOLDER. يسمح هذا للنظام بتحديد موقع أي خطوط مطلوبة في ذلك المجلد.
- حدد النص وحجمه.
- أنشئ مثيلاً جديداً من PsDocument مع تدفق الإخراج والخيارات و false كمعاملات. يؤدي هذا إلى تهيئة مستند PostScript جديد بالخيارات المحددة.
- استدعِ طريقة ClosePage() على كائن المستند، مما يشير إلى اكتمال الصفحة الحالية.
- استخدم طريقة Save() لحفظ التغييرات التي تم إجراؤها على مستند PS.
تعليمات برمجية C++ لإضافة نص إلى ملف PS
// The path to the documents directory.
System::String dataDir = RunExamples::GetDataDir_WorkingWithText();
System::String FONTS_FOLDER = RunExamples::GetDataDir_Data() + u"necessary_fonts/";
//Create output stream for PostScript document
{
System::SharedPtr<System::IO::Stream> outPsStream = System::MakeObject<System::IO::FileStream>(dataDir + u"AddText_outPS.ps", System::IO::FileMode::Create);
// Clearing resources under 'using' statement
System::Details::DisposeGuard<1> __dispose_guard_0({ outPsStream});
// ------------------------------------------
try
{
//Create save options with A4 size
System::SharedPtr<PsSaveOptions> options = System::MakeObject<PsSaveOptions>();
// Set custom fonts folder. It will be added to system fonts folders for finding needed font.
options->set_AdditionalFontsFolders(System::MakeArray<System::String>({FONTS_FOLDER}));
//A text to write to PS file
System::String str = u"ABCDEFGHIJKLMNO";
int32_t fontSize = 48;
// Create new 1-paged PS Document
System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(outPsStream, options, false);
////////////////////////////////////// Using sysem font (located in system fonts folders) for filling text //////////////////
System::SharedPtr<System::Drawing::Font> font = System::MakeObject<System::Drawing::Font>(u"Times New Roman", static_cast<float>(fontSize), System::Drawing::FontStyle::Bold);
//Fill text with default or already defined color. In given case it is black.
document->FillText(str, font, 50.0f, 100.0f);
//Fill text with Blue color.
document->FillText(str, font, 50.0f, 150.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Blue()));
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////// Using custom font (located in custom fonts folders) for filling text /////////////////
System::SharedPtr<DrFont> drFont = ExternalFontCache::FetchDrFont(u"Palatino Linotype", static_cast<float>(fontSize), System::Drawing::FontStyle::Regular);
//Fill text with default or already defined color. In given case it is black.
document->FillText(str, drFont, 50.0f, 200.0f);
//Fill text with Blue color.
document->FillText(str, drFont, 50.0f, 250.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Blue()));
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////// Using sysem font (located in system fonts folders) for outlining text ////////////////
//Outline text with default or already defined pen. In given case it is black colored 1-points width pen.
document->OutlineText(str, font, 50.0f, 300.0f);
//Outline text with blue-violet colored 2-points width pen.
document->OutlineText(str, font, 50.0f, 350.0f, System::MakeObject<System::Drawing::Pen>(System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_BlueViolet()), 2.0f));
//Fill text with orange color and stroke with blue colored 2-points width pen.
document->FillAndStrokeText(str, font, 50.0f, 400.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Yellow()), System::MakeObject<System::Drawing::Pen>(System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_BlueViolet()), 2.0f));
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////// Using custom font (located in custom fonts folders) for outlining text /////////////////
//Outline text with default or already defined pen. In given case it is black colored 1-points width pen.
document->OutlineText(str, drFont, 50.0f, 450.0f);
//Outline text with blue-violet colored 2-points width pen.
document->OutlineText(str, drFont, 50.0f, 500.0f, System::MakeObject<System::Drawing::Pen>(System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_BlueViolet()), 2.0f));
//Fill text with orange color and stroke with blue colored 2-points width pen.
document->FillAndStrokeText(str, drFont, 50.0f, 550.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Orange()), System::MakeObject<System::Drawing::Pen>(System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Blue()), 2.0f));
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// Using custom font (located in custom fonts folders) ang glyphs widths for filling text ////////
drFont = ExternalFontCache::FetchDrFont(u"Palatino Linotype", static_cast<float>(fontSize), System::Drawing::FontStyle::Regular);
//Glyphs widths
System::ArrayPtr<float> widths = System::MakeArray<float>({87, 87, 87, 87, 34, 87, 87});
//Fill ASCII text using with assigning glyphs widths.
document->FillText(u"BAMBOOK", widths, drFont, 50.0f, 600.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Blue()));
///////////////////////////// Using custom font (located in custom fonts folders) ang glyphs widths for filling unicode text //
//Glyphs widths
widths = System::MakeArray<float>({87, 34, 87, 87, 87, 87, 87});
//Fill Unicode text using with assigning glyphs widths.
document->FillText(u"ЗООПАРК", widths, drFont, 50.0f, 650.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Orange()));
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Close current page
document->ClosePage();
//Save the document
document->Save();
}
catch(...)
{
__dispose_guard_0.SetCurrentException(std::current_exception());
}
}
PS What is PS File Format
تنسيق PS (PostScript) هو لغة وصف صفحات تُدمج النصوص والرسومات في ملف واحد. يُستخدم على نطاق واسع في برامج تحرير الصور والطباعة، حيث يحتوي على تعليمات للطابعات حول كيفية طباعة المحتوى.