Добавить текст в файлы 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 .

  1. Инициализируйте переменную dataDir, указав путь к каталогу, содержащему документы.
  2. Задайте для переменной FONTS_FOLDER путь к папке, содержащей необходимые шрифты.
  3. Создайте поток вывода для документа PostScript, используя класс FileStream.
  4. Укажите параметры сохранения документа PostScript с помощью объекта PsSaveOptions .
  5. Свойству ExtraFontsFolders объекта параметров присвоено значение массива, содержащего путь к FONTS_FOLDER. Это позволяет системе найти любые необходимые шрифты в этой папке.
  6. Укажите текст и его размер.
  7. Создайте новый экземпляр PsDocument с потоком вывода, параметрами и false в качестве параметров. Это инициализирует новый документ PostScript с указанными параметрами.
  8. Вызовите метод ClosePage() для объекта документа, указав, что текущая страница завершена.
  9. Используйте метод 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 является своеобразной инструкцией для принтеров. Он содержит информацию о том, что и как печатать со своей страницы.