Добавить текст в файлы PS
Решение C++ API для работы с текстами PS-файлов
PostScript, мощный язык описания страниц, предлагает детальный контроль над размещением и форматированием текста. Вот несколько ключевых нюансов, которые следует учитывать при работе с текстом в PostScript:
- PostScript позволяет выбирать шрифты, используя их имена PostScript. Распространенные шрифты, такие как Times Roman, Helvetica и Courier, часто доступны по умолчанию. Чтобы обеспечить единообразную визуализацию в разных системах, вы можете встраивать шрифты непосредственно в файл PostScript. Это особенно важно для пользовательских шрифтов или менее распространенных семейств шрифтов.
- Размер и стиль шрифта. Оператор Fontsize устанавливает размер шрифта в пунктах. Для изменения стилей шрифтов используйте такие операторы, как
setfont
, которые задают жирный, курсив или другие варианты. - Позиционирование текста. Оператор moveto перемещает текстовый курсор в определенную точку страницы. Хотя в PostScript нет операторов прямого выравнивания, выравнивание можно выполнить осторожно.
- Поворот и масштабирование текста. Оператор «поворот» можно использовать для поворота текста на определенный угол, а оператор «масштаб» — для увеличения или уменьшения текста.
- Визуализация текста. PostScript поддерживает сглаживание, которое сглаживает края текста для лучшей читаемости. Вы также можете контролировать расстояние между символами (кернинг) и строками (интерлиньяж), чтобы точно настроить внешний вид текста.
Понимание этих аспектов может помочь обеспечить правильное использование шрифтов и согласованную визуализацию в рабочих процессах на основе PostScript. Но несмотря ни на что, Aspose.Page предоставляет вам возможность легко управлять шрифтами файлов PS. С помощью этого API вы можете добавлять тексты разных цветов и кистей, используя собственные или системные шрифты. Чтобы узнать больше о как работать с PS-файлами и как работать с текстами PS-файлов , в частности, следуйте документации.
Для вставки текстов в документы PS нам понадобится:
Aspose.Page для C++ API — многофункциональный, мощный и простой в использовании API C++ для манипулирования и преобразования документов.
Откройте диспетчер пакетов NuGet, найдите Aspose.Page.Cpp и установите. Вы также можете использовать следующую команду из консоли диспетчера пакетов.
Package Manager Console Command
PM> Install-Package Aspose.Page.Cpp
Действия по добавлению текста в файл PS.
В приведенном ниже фрагменте кода показано, как добавить текст с помощью строки Unicode в документ PostScript (PS) с помощью библиотеки Aspose.Page на C#. Чтобы увидеть более полную версию примера и другие примеры, перейдите в проект Aspose.Page-for-C++ GitHub .
- Инициализируйте переменную dataDir, указав путь к каталогу, содержащему документы.
- Задайте для переменной FONTS_FOLDER путь к папке, содержащей необходимые шрифты.
- Создайте поток вывода для документа PostScript, используя класс FileStream.
- Укажите параметры сохранения документа PostScript с помощью объекта PsSaveOptions .
- Свойству ExtraFontsFolders объекта параметров присвоено значение массива, содержащего путь к FONTS_FOLDER. Это позволяет системе найти любые необходимые шрифты в этой папке.
- Укажите текст и его размер.
- Создайте новый экземпляр PsDocument с потоком вывода, параметрами и false в качестве параметров. Это инициализирует новый документ PostScript с указанными параметрами.
- Вызовите метод ClosePage() для объекта документа, указав, что текущая страница завершена.
- Используйте метод Save(), чтобы сохранить изменения, внесенные в документ PS.
Добавляем изображения в 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 Формат файла PS
Формат PS является одним из форматов языка описания страниц (PDL). Он способен содержать как графическую, так и текстовую информацию на странице. Именно поэтому формат поддерживался большинством программ для редактирования изображений. Сам файл postscript является своеобразной инструкцией для принтеров. Он содержит информацию о том, что и как печатать со своей страницы.