Adicionar texto a arquivos PS

Solução de API C++ para trabalhar com textos de arquivos PS

 

PostScript, uma poderosa linguagem de descrição de página, oferece controle granular sobre o posicionamento e a formatação do texto. Aqui estão algumas nuances importantes a considerar ao trabalhar com texto em PostScript:

  • O PostScript permite selecionar fontes usando seus nomes PostScript. Fontes comuns como Times Roman, Helvetica e Courier estão frequentemente disponíveis por padrão. Para garantir uma renderização consistente em diferentes sistemas, você pode incorporar fontes diretamente em seu arquivo PostScript. Isso é 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 os estilos de fonte, use operadores como setfont, que especifica negrito, itálico ou outras variações.
  • Posicionamento do Texto - O operador moveto posiciona o cursor de texto em um ponto específico da página. Embora o PostScript não tenha operadores de alinhamento direto, você pode obter o alinhamento por meio de cálculos cuidadosos.
  • Rotação e Escala de Texto - O operador rotate pode ser usado para girar o texto em um ângulo específico, e o operador scale pode ser usado para aumentar ou diminuir o tamanho do texto.
  • Renderização de Texto - O PostScript suporta anti-aliasing, que suaviza as bordas do texto para melhor legibilidade. Você também pode controlar o espaçamento entre caracteres (kerning) e linhas (leading) para ajustar a aparência do texto.

Compreender esses aspectos pode ajudar a garantir o uso adequado da fonte e uma renderização consistente em fluxos de trabalho baseados em PostScript. De qualquer forma, o Aspose.Page fornece a funcionalidade para gerenciar as fontes dos arquivos PS facilmente. Com esta API, você pode adicionar textos de cores e pincéis diferentes 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 documentazione.

Para inserir textos em documentos PS, precisamos de:

  • API Aspose.Page para C++, que é uma API C++ de manipulação e conversão de documentos rica em recursos, poderosa e fácil de usar.

  • Abra o gerenciador de pacotes NuGet, procure por Aspose.Page.Cpp e instale. Você também pode usar o seguinte comando no Console do Gerenciador de Pacotes.

Package Manager Console Command

    PM> Install-Package Aspose.Page.Cpp

Etapas para adicionar texto a um arquivo PS.

O snippet 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 o projeto GitHub Aspose.Page-for-C++ .

  1. Inicialize a variável dataDir com o caminho para o diretório que contém os documentos.
  2. Defina a variável FONTS_FOLDER com o caminho da pasta que contém as fontes necessárias.
  3. Crie um fluxo de saída para o documento PostScript usando a classe FileStream.
  4. Especifique as opções de salvamento para o documento PostScript usando o objeto PsSaveOptions .
  5. A propriedade AdditionalFontsFolders do objeto de opções é definida para um array contendo o caminho para o FONTS_FOLDER. Isso permite que o sistema localize quaisquer fontes necessárias naquela pasta.
  6. Especifique o texto e seu tamanho.
  7. Crie uma nova instância de PsDocument com o fluxo de saída, opções e false como parâmetros. Isso inicializa um novo documento PostScript com as opções especificadas.
  8. Chame o método ClosePage() no objeto de documento, indicando que a página atual foi concluída.
  9. Use o método Save() para salvar as alterações feitas no documento PS.
Código C++ para adicionar texto a um arquivo 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) é uma linguagem de descrição de página que combina texto e gráficos em um único arquivo. Amplamente suportado por editores de imagem e impressoras, contém instruções de renderização para o dispositivo.