Formateo de Texto dentro de PDF usando C++

Cómo agregar Sangría de Línea a PDF

Para agregar sangría de línea a PDF Aspose.PDF para C++ utiliza la propiedad SubsequentLinesIndent en la clase TextFormattingOptions y también ayuda a las colecciones TextFragment y Paragraphs.

Por favor, use el siguiente fragmento de código para usar la propiedad:

using namespace System;
using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Text;

void AddLineIndent() {

    String _dataDir("C:\\Samples\\");

    // Cadena para el nombre del archivo de salida
    String outputFileName("SubsequentIndent_out.pdf");


    // Crear nuevo objeto de documento
    auto document = MakeObject<Document>();
    auto page = document->get_Pages()->Add();

    auto text = MakeObject<TextFragment>("A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog.");

    // Inicializar TextFormattingOptions para el fragmento de texto y especificar el valor de SubsequentLinesIndent

    text->get_TextState()->set_FormattingOptions(MakeObject<Aspose::Pdf::Text::TextFormattingOptions>());
    text->get_TextState()->get_FormattingOptions()->set_SubsequentLinesIndent(20);

    page->get_Paragraphs()->Add(text);

    text = MakeObject<Aspose::Pdf::Text::TextFragment>(u"Line2");
    page->get_Paragraphs()->Add(text);

    text = MakeObject<Aspose::Pdf::Text::TextFragment>(u"Line3");
    page->get_Paragraphs()->Add(text);

    text = MakeObject<Aspose::Pdf::Text::TextFragment>(u"Line4");
    page->get_Paragraphs()->Add(text);

    text = MakeObject<Aspose::Pdf::Text::TextFragment>(u"Line5");
    page->get_Paragraphs()->Add(text);

    document->Save(_dataDir + outputFileName);

}

Cómo añadir un borde de texto

El siguiente fragmento de código muestra, cómo añadir un borde a un texto usando TextBuilder y configurando la propiedad DrawTextRectangleBorder de TextState

void AddTextBorder() {

    String _dataDir("C:\\Samples\\");

    // String para el nombre del archivo de salida
    String outputFileName("PDFWithTextBorder_out.pdf");

    // Crear un nuevo objeto de documento
    auto document = MakeObject<Document>();
    // Obtener una página en particular
    auto page = document->get_Pages()->Add();

    // Crear fragmento de texto
    auto textFragment = MakeObject<TextFragment>("main text");
    textFragment->set_Position(MakeObject<Position>(100, 600));

    // Configurar propiedades de texto
    textFragment->get_TextState()->set_FontSize(12);
    textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"DejaVu Serif"));
    textFragment->get_TextState()->set_BackgroundColor(Color::get_LightGray());
    textFragment->get_TextState()->set_ForegroundColor(Color::get_Red());
    // Configurar la propiedad StrokingColor para dibujar el borde (contorno) alrededor del texto
    // rectángulo
    textFragment->get_TextState()->set_StrokingColor(Color::get_DarkRed());
    // Configurar el valor de la propiedad DrawTextRectangleBorder a true
    textFragment->get_TextState()->set_DrawTextRectangleBorder(true);
    auto tb = MakeObject<TextBuilder>(page);
    tb->AppendText(textFragment);
    // Guardar el documento
    document->Save(_dataDir + outputFileName);
}

Cómo agregar texto subrayado

El siguiente fragmento de código te muestra cómo agregar texto subrayado mientras creas un nuevo archivo PDF.

void AddUnderlineText() {
    String _dataDir("C:\\Samples\\");

    // String para el nombre del archivo de salida
    String outputFileName("AddUnderlineText_out.pdf");

    // Crear un nuevo objeto de documento
    auto document = MakeObject<Document>();
    // Obtener una página en particular
    auto page = document->get_Pages()->Add();

    // TextFragment con texto de muestra
    auto fragment = MakeObject<TextFragment>("Texto con decoración de subrayado");
    // Establecer la fuente para TextFragment
    fragment->get_TextState()->set_Font(FontRepository::FindFont(u"DejaVu Serif"));
    fragment->get_TextState()->set_FontSize(10);

    // Establecer el formato del texto como subrayado
    fragment->get_TextState()->set_Underline(true);

    // Especificar la posición donde se necesita colocar TextFragment
    fragment->set_Position(MakeObject<Position>(10, 800));

    auto tb = MakeObject<TextBuilder>(page);
    // Adjuntar TextFragment al archivo PDF
    tb->AppendText(fragment);

    // Guardar el documento PDF resultante.
    document->Save(_dataDir + outputFileName);
}

Cómo agregar un borde alrededor del texto agregado

Tienes control sobre el aspecto y la sensación del texto que agregas. El ejemplo a continuación muestra cómo agregar un borde alrededor de un fragmento de texto que has agregado dibujando un rectángulo alrededor de él. Descubre más sobre la clase PdfContentEditor.

void AddBorderAroundAddedText() {

    String _dataDir("C:\\Samples\\");

    // Cadena para nombre de archivo de entrada
    String inputFileName("sample.pdf");

    // Cadena para nombre de archivo de salida
    String outputFileName("AddingBorderAroundAddedText_out.pdf");

    auto editor = MakeObject<Aspose::Pdf::Facades::PdfContentEditor>();

    editor->BindPdf(_dataDir + inputFileName);
    auto lineInfo = MakeObject<Aspose::Pdf::Facades::LineInfo>();

    lineInfo->set_LineWidth(2);
    lineInfo->set_VerticeCoordinate(MakeArray<float>({ 0, 0, 100, 100, 50, 100 }));
    lineInfo->set_Visibility(true);
    auto rect = MakeObject<System::Drawing::Rectangle>(0, 0, 0, 0);
    editor->CreatePolygon(lineInfo, 1, System::Drawing::Rectangle(0, 0, 0, 0), String::Empty);

    // Guardar documento PDF resultante.
    editor->Save(_dataDir + outputFileName);
}

Cómo agregar un salto de línea

Para agregar texto con salto de línea, por favor use TextFragment con TextParagraph.

El siguiente fragmento de código le muestra cómo agregar un salto de línea en su archivo PDF:

void AddNewLineFeed() {
    String _dataDir("C:\\Samples\\");

    // String para el nombre del archivo de salida
    String outputFileName("AddNewLineFeed_out.pdf");

    // Crear nuevo objeto de documento
    auto document = MakeObject<Document>();
    // Obtener una página en particular
    auto page = document->get_Pages()->Add();

    // Inicializar un nuevo TextFragment con texto que contiene los marcadores de salto de línea requeridos
    auto textFragment = MakeObject<TextFragment>("Applicant Name: \r\n Joe Smoe");

    // Establecer propiedades del fragmento de texto si es necesario
    textFragment->get_TextState()->set_FontSize(12);
    textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"DejaVu Serif"));
    textFragment->get_TextState()->set_BackgroundColor(Color::get_LightGray());
    textFragment->get_TextState()->set_ForegroundColor(Color::get_Red());

    // Crear objeto TextParagraph
    auto par = MakeObject<TextParagraph>();

    // Agregar nuevo TextFragment al párrafo
    par->AppendLine(textFragment);

    // Establecer posición del párrafo
    par->set_Position(MakeObject<Position>(100, 600));

    // Crear objeto TextBuilder
    auto textBuilder = new TextBuilder(page);
    // Agregar el TextParagraph usando TextBuilder
    textBuilder->AppendParagraph(par);

    // Guardar el documento PDF resultante.
    document->Save(_dataDir + outputFileName);
}

Cómo agregar texto tachado

Puede usar la clase TextState para establecer el formato de texto, como Negrita, Cursiva, Subrayado, y además, la API ha proporcionado las capacidades para marcar el formato de texto como Tachado.

Por favor, intente usar el siguiente fragmento de código para agregar un TextFragment con formato Tachado.

void AddStrikeOutText() {
    String _dataDir("C:\\Samples\\");

    // String para el nombre del archivo de salida
    String outputFileName("AddStrikeOutText_out.pdf");

    // Abrir documento
    auto document = MakeObject<Document>();
    // Obtener página particular
    auto page = document->get_Pages()->Add();

    // Crear fragmento de texto
    auto textFragment = MakeObject<TextFragment>("main text");
    textFragment->set_Position(MakeObject<Position>(100, 600));

    // Establecer propiedades de texto
    textFragment->get_TextState()->set_FontSize(12);
    textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"DejaVu Serif"));
    textFragment->get_TextState()->set_BackgroundColor(Color::get_LightGray());
    textFragment->get_TextState()->set_ForegroundColor(Color::get_Red());
    // Establecer propiedad de Tachado
    textFragment->get_TextState()->set_StrikeOut(true);
    // Marcar texto como Negrita
    textFragment->get_TextState()->set_FontStyle(FontStyles::Bold);

    // Crear objeto TextBuilder
    auto textBuilder = MakeObject<TextBuilder>(page);
    // Añadir el fragmento de texto a la página PDF
    textBuilder->AppendText(textFragment);

    // Guardar el documento PDF resultante.
    document->Save(_dataDir + outputFileName);
}

Aplicar sombreado degradado al texto

La clase Aspose.Pdf.Color se ha mejorado aún más introduciendo una nueva propiedad de PatternColorSpace, que se puede utilizar para especificar colores de sombreado para el texto. Esta nueva propiedad añade diferentes sombreados degradados al texto, por ejemplo, sombreado axial, sombreado radial (Tipo 3) como se muestra en el siguiente fragmento de código:

void ApplyGradientShading() {

    String _dataDir("C:\\Samples\\");

    // String para el nombre del archivo de entrada
    String inputFileName("sample.pdf");

    // String para el nombre del archivo de salida
    String outputFileName("ApplyGradientShading_out.pdf");

    // Abrir documento
    auto document = MakeObject<Document>(_dataDir + inputFileName);

    auto absorber = MakeObject<TextFragmentAbsorber>("always print correctly");

    document->get_Pages()->Accept(absorber);

    auto textFragment = absorber->get_TextFragments()->idx_get(1);

    auto foregroundColor = MakeObject<Aspose::Pdf::Color>();
    foregroundColor->set_PatternColorSpace(MakeObject<Aspose::Pdf::Drawing::GradientAxialShading>(Color::get_Red(), Color::get_Blue()));

    // Crear nuevo color con espacio de color de patrón
    textFragment->get_TextState()->set_ForegroundColor(foregroundColor);

    textFragment->get_TextState()->set_Underline(true);

    document->Save(_dataDir + outputFileName);

}

Para aplicar un degradado radial, puede establecer la propiedad ‘PatternColorSpace’ igual a ‘Aspose.Pdf.Drawing.GradientRadialShading(startingColor, endingColor)’ en el fragmento de código anterior.

Cómo alinear el texto al contenido flotante

Aspose.PDF admite la configuración de la alineación del texto para contenidos dentro de un elemento de Caja Flotante. Las propiedades de alineación de la instancia Aspose.Pdf.FloatingBox se pueden utilizar para lograr esto, como se muestra en el siguiente ejemplo de código.

void ApplyGradientShadingRadial() {

    String _dataDir("C:\\Samples\\");

    // String para el nombre del archivo de entrada
    String inputFileName("sample.pdf");

    // String para el nombre del archivo de salida
    String outputFileName("ApplyGradientShadingRadial_out.pdf");

    auto document = MakeObject<Document>(_dataDir + inputFileName);

    auto absorber = MakeObject<TextFragmentAbsorber>(u"always print correctly");
    document->get_Pages()->Accept(absorber);

    auto textFragment = absorber->get_TextFragments()->idx_get(1);

    auto foregroundColor = MakeObject<Aspose::Pdf::Color>();
    foregroundColor->set_PatternColorSpace(MakeObject<Aspose::Pdf::Drawing::GradientRadialShading>(Color::get_Red(), Color::get_Blue()));

    // Crear nuevo color con espacio de color de patrón
    textFragment->get_TextState()->set_ForegroundColor(foregroundColor);

    textFragment->get_TextState()->set_Underline(true);

    document->Save(_dataDir + outputFileName);
}