Formatação de Texto em PDF usando C++
Como adicionar Recuo de Linha ao PDF
Para adicionar recuo de linha ao PDF, Aspose.PDF para C++ usa a propriedade SubsequentLinesIndent na classe TextFormattingOptions e também auxilia as coleções TextFragment e Paragraphs.
Por favor, use o seguinte trecho de código para usar a propriedade:
using namespace System;
using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Text;
void AddLineIndent() {
String _dataDir("C:\\Samples\\");
// String para nome do arquivo de saída
String outputFileName("SubsequentIndent_out.pdf");
// Criar novo 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 o fragmento de texto e especificar o valor 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);
}
Como adicionar borda ao texto
O trecho de código a seguir mostra como adicionar uma borda a um texto usando TextBuilder e configurando a propriedade DrawTextRectangleBorder de TextState
void AddTextBorder() {
String _dataDir("C:\\Samples\\");
// String para nome do arquivo de saída
String outputFileName("PDFWithTextBorder_out.pdf");
// Criar novo objeto de documento
auto document = MakeObject<Document>();
// Obter página específica
auto page = document->get_Pages()->Add();
// Criar fragmento de texto
auto textFragment = MakeObject<TextFragment>("main text");
textFragment->set_Position(MakeObject<Position>(100, 600));
// Definir propriedades do 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());
// Definir propriedade StrokingColor para desenhar borda ao redor do texto
// retângulo
textFragment->get_TextState()->set_StrokingColor(Color::get_DarkRed());
// Definir valor da propriedade DrawTextRectangleBorder como true
textFragment->get_TextState()->set_DrawTextRectangleBorder(true);
auto tb = MakeObject<TextBuilder>(page);
tb->AppendText(textFragment);
// Salvar o documento
document->Save(_dataDir + outputFileName);
}
Como adicionar Texto Sublinhado
O seguinte trecho de código mostra como adicionar texto sublinhado ao criar um novo arquivo PDF.
void AddUnderlineText() {
String _dataDir("C:\\Samples\\");
// String para nome do arquivo de saída
String outputFileName("AddUnderlineText_out.pdf");
// Criar novo objeto de documento
auto document = MakeObject<Document>();
// Obter página específica
auto page = document->get_Pages()->Add();
// TextFragment com texto de exemplo
auto fragment = MakeObject<TextFragment>("Texto com decoração de sublinhado");
// Definir a fonte para TextFragment
fragment->get_TextState()->set_Font(FontRepository::FindFont(u"DejaVu Serif"));
fragment->get_TextState()->set_FontSize(10);
// Definir a formatação do texto como Sublinhado
fragment->get_TextState()->set_Underline(true);
// Especificar a posição onde TextFragment precisa ser colocado
fragment->set_Position(MakeObject<Position>(10, 800));
auto tb = MakeObject<TextBuilder>(page);
// Anexar TextFragment ao arquivo PDF
tb->AppendText(fragment);
// Salvar documento PDF resultante.
document->Save(_dataDir + outputFileName);
}
Como adicionar borda ao redor do texto adicionado
Você tem controle sobre a aparência do texto que adiciona. O exemplo abaixo mostra como adicionar uma borda ao redor de um trecho de texto que você adicionou, desenhando um retângulo ao redor dele. Saiba mais sobre a classe PdfContentEditor.
void AddBorderAroundAddedText() {
String _dataDir("C:\\Samples\\");
// String para nome do arquivo de entrada
String inputFileName("sample.pdf");
// String para nome do arquivo de saída
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);
// Salvar documento PDF resultante.
editor->Save(_dataDir + outputFileName);
}
Como adicionar uma quebra de linha
Para adicionar texto com quebra de linha, por favor, use TextFragment com TextParagraph.
O seguinte trecho de código mostra como adicionar uma quebra de linha em seu arquivo PDF:
void AddNewLineFeed() {
String _dataDir("C:\\Samples\\");
// String para nome do arquivo de saída
String outputFileName("AddNewLineFeed_out.pdf");
// Criar novo objeto de documento
auto document = MakeObject<Document>();
// Obter página específica
auto page = document->get_Pages()->Add();
// Inicializar novo TextFragment com texto contendo marcadores de nova linha necessários
auto textFragment = MakeObject<TextFragment>("Applicant Name: \r\n Joe Smoe");
// Definir propriedades do fragmento de texto, se necessário
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());
// Criar objeto TextParagraph
auto par = MakeObject<TextParagraph>();
// Adicionar novo TextFragment ao parágrafo
par->AppendLine(textFragment);
// Definir posição do parágrafo
par->set_Position(MakeObject<Position>(100, 600));
// Criar objeto TextBuilder
auto textBuilder = new TextBuilder(page);
// Adicionar o TextParagraph usando TextBuilder
textBuilder->AppendParagraph(par);
// Salvar documento PDF resultante.
document->Save(_dataDir + outputFileName);
}
Como adicionar texto tachado
Você pode usar a classe TextState para definir formatação de texto como Negrito, Itálico, Sublinhado, e também, a API forneceu as capacidades para marcar a formatação de texto como Tachado.
Por favor, tente usar o seguinte trecho de código para adicionar TextFragment com formatação Tachada.
void AddStrikeOutText() {
String _dataDir("C:\\Samples\\");
// String para nome do arquivo de saída
String outputFileName("AddStrikeOutText_out.pdf");
// Abrir documento
auto document = MakeObject<Document>();
// Obter página específica
auto page = document->get_Pages()->Add();
// Criar fragmento de texto
auto textFragment = MakeObject<TextFragment>("main text");
textFragment->set_Position(MakeObject<Position>(100, 600));
// Definir propriedades do 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());
// Definir propriedade de Tachado
textFragment->get_TextState()->set_StrikeOut(true);
// Marcar texto como Negrito
textFragment->get_TextState()->set_FontStyle(FontStyles::Bold);
// Criar objeto TextBuilder
auto textBuilder = MakeObject<TextBuilder>(page);
// Anexar o fragmento de texto à página PDF
textBuilder->AppendText(textFragment);
// Salvar documento PDF resultante.
document->Save(_dataDir + outputFileName);
}
Aplicar Sombreamento em Gradiente ao Texto
A Classe Aspose.Pdf.Color foi ainda mais aprimorada com a introdução de uma nova propriedade de PatternColorSpace, que pode ser usada para especificar cores de sombreamento para o texto. Esta nova propriedade adiciona diferentes Sombreamentos em Gradiente ao texto, por exemplo, Sombreamento Axial, Sombreamento Radial (Tipo 3), conforme mostrado no seguinte trecho de código:
void ApplyGradientShading() {
String _dataDir("C:\\Samples\\");
// String para o nome do arquivo de entrada
String inputFileName("sample.pdf");
// String para o nome do arquivo de saída
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()));
// Criar nova cor com o espaço de cores do padrão
textFragment->get_TextState()->set_ForegroundColor(foregroundColor);
textFragment->get_TextState()->set_Underline(true);
document->Save(_dataDir + outputFileName);
}
Para aplicar um Gradiente Radial, você pode definir a propriedade ‘PatternColorSpace’ igual a ‘Aspose.Pdf.Drawing.GradientRadialShading(startingColor, endingColor)’ no trecho de código acima.
Como alinhar texto ao conteúdo flutuante
Aspose.PDF suporta a definição de alinhamento de texto para conteúdos dentro de um elemento Floating Box. As propriedades de alinhamento da instância Aspose.Pdf.FloatingBox podem ser usadas para alcançar isso, como mostrado no exemplo de código a seguir.
void ApplyGradientShadingRadial() {
String _dataDir("C:\\Samples\\");
// String para nome do arquivo de entrada
String inputFileName("sample.pdf");
// String para nome do arquivo de saída
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()));
// Criar nova cor com espaço de cor padrão
textFragment->get_TextState()->set_ForegroundColor(foregroundColor);
textFragment->get_TextState()->set_Underline(true);
document->Save(_dataDir + outputFileName);
}