Adicione texto aos arquivos PS
Solução API C++ para trabalhar com textos de arquivos PS
PostScript, uma poderosa linguagem de descrição de páginas, oferece controle granular sobre o posicionamento e a formatação do texto. Aqui estão algumas nuances importantes a serem consideradas ao trabalhar com texto em PostScript:
- PostScript permite selecionar fontes usando seus nomes PostScript. Fontes comuns como Times Roman, Helvetica e Courier geralmente estão disponíveis por padrão. Para garantir uma renderização consistente em diferentes sistemas, você pode incorporar fontes diretamente em seu arquivo PostScript. Isto é especialmente importante para fontes personalizadas ou famílias de fontes menos comuns.
- Tamanho e estilo da fonte - O operador
fontsize
define o tamanho da fonte em pontos. Para modificar estilos de fonte, use operadores comosetfont
que especifica negrito, itálico ou outras variações. - Posicionamento de texto - O operador
moveto
posiciona o cursor de texto em um ponto específico da página. Embora o PostScript não possua operadores de alinhamento direto, você pode obter o alinhamento com cuidado. - Rotação e dimensionamento de texto - O operador
rotate
pode ser usado para girar o texto em um ângulo específico, e o operadorscale
pode ser usado para dimensionar o texto para cima ou para baixo. - Renderização de texto – PostScript suporta suavização de serrilhado, que suaviza as bordas do texto para melhor legibilidade. Você também pode controlar o espaçamento entre caracteres (kerning) e linhas (entrelinhamento) para ajustar a aparência do texto.
A compreensão desses aspectos pode ajudar a garantir o uso adequado da fonte e a renderização consistente em fluxos de trabalho baseados em PostScript. Mas não importa o que aconteça, - Aspose.Page fornece a funcionalidade para gerenciar facilmente as fontes dos arquivos PS. Com esta API você pode adicionar textos de diferentes cores e pincéis usando fontes personalizadas ou do sistema. Para saber mais sobre como lidar com arquivos PS e como trabalhar com textos de arquivos PS em particular siga a documentação.
Para inserir textos em documentos PS precisamos:
Aspose.Page for C++ API, que é uma API C++ rica em recursos, poderosa e fácil de usar para manipulação e conversão de documentos.
Abra o gerenciador de pacotes NuGet, pesquise Aspose.Page.Cpp e instale. Você também pode usar o seguinte comando do Console do Gerenciador de Pacotes.
Package Manager Console Command
PM> Install-Package Aspose.Page.Cpp
Etapas para adicionar texto a um arquivo PS.
O trecho de código abaixo demonstra como adicionar texto usando uma string Unicode a um documento PostScript (PS) usando a biblioteca Aspose.Page em C#. Para ver uma versão mais completa do exemplo e mais exemplos, acesse projeto Aspose.Page-for-C++ GitHub .
- Inicialize a variável dataDir com o caminho para o diretório que contém os documentos.
- Defina a variável FONTS_FOLDER para definir o caminho da pasta que contém as fontes necessárias.
- Crie um fluxo de saída para o documento PostScript usando a classe FileStream.
- Especifique as opções de salvamento para o documento PostScript usando o objeto PsSaveOptions .
- A propriedade AdicionalFontsFolders do objeto de opções é definida como uma matriz contendo o caminho para FONTS_FOLDER. Isso permite que o sistema localize quaisquer fontes necessárias nessa pasta.
- Especifique o texto e seu tamanho.
- Crie uma nova instância de PsDocument com o fluxo de saída, opções e false como parâmetros. Isto inicializa um novo documento PostScript com as opções especificadas.
- Chame o método ClosePage() no objeto de documento, indicando que a página atual foi concluída.
- Use o método Save() para salvar as alterações feitas no documento PS.
Adicionar imagens ao 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 O que é PS Formato de Arquivo
O formato PS é um dos formatos de linguagem de descrição de página (PDL). É capaz de conter informações gráficas e de texto na página. É por isso que o formato era suportado pela maioria dos programas de edição de imagens. O próprio arquivo postscript é um tipo de instrução para impressoras. Ele contém informações sobre o que e como imprimir a partir de sua página.