Anotação de Destaques em PDF usando C++
As Anotações de Marcação de Texto devem ser exibidas no texto do documento como um destaque, sublinhado, tachado ou sublinhado ondulado. Ao serem abertas, elas devem exibir uma janela pop-up contendo o texto da nota correspondente.
Você pode editar as propriedades das Anotações de Marcação de Texto em um PDF usando a janela de Propriedades fornecida no controle do Visualizador de PDF. Você pode alterar a cor, opacidade, autor e tema das Anotações de Marcação de Texto.
Você pode obter ou definir as configurações de anotação de destaque usando a propriedade highlightSettings. A propriedade highlightSettings é usada para definir as propriedades de cor, opacidade, autor, tema, modifiedDate e isLocked para anotações de destaque.
Também é possível obter ou definir configurações de anotação de riscar usando a propriedade strikethroughSettings. A propriedade strikethroughSettings é usada para definir as propriedades de cor, opacidade, autor, tema, modifiedDate e isLocked das anotações de riscar.
A próxima funcionalidade é a capacidade de obter ou definir as configurações para anotações de sublinhado usando a propriedade underlineSettings. A propriedade underlineSettings é usada para definir as propriedades de cor, opacidade, autor, tema, modifiedDate e isLocked para anotações de sublinhado.
Adicionar Anotação de Marcação de Texto
Para adicionar uma Anotação de Marcação de Texto ao documento PDF, precisamos realizar as seguintes ações:
-
Carregar o arquivo PDF - novo objeto Document.
-
Criar anotações:
- HighlightAnnotation e definir parâmetros (título, cor).- StrikeOutAnnotation e definir parâmetros (título, cor).
- SquigglyAnnotation e definir parâmetros (título, cor).
- UnderlineAnnotation e definir parâmetros (título, cor).
- Depois devemos adicionar todas as anotações à página.
using namespace System;
using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Text;
void TextMarkupAnnotations::AddTextMarkupAnnotation()
{
String _dataDir("C:\\Samples\\");
try
{
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"sample.pdf");
auto tfa = MakeObject<Aspose::Pdf::Text::TextFragmentAbsorber>(u"PDF");
tfa->Visit(document->get_Pages()->idx_get(1));
//Criar anotações
auto highlightAnnotation = MakeObject<Aspose::Pdf::Annotations::HighlightAnnotation>(
document->get_Pages()->idx_get(1),
tfa->get_TextFragments()->idx_get(1)->get_Rectangle());
highlightAnnotation->set_Title(u"Usuário Aspose");
highlightAnnotation->set_Color(Color::get_LightGreen());
auto strikeOutAnnotation = MakeObject<Aspose::Pdf::Annotations::StrikeOutAnnotation>(
document->get_Pages()->idx_get(1),
tfa->get_TextFragments()->idx_get(2)->get_Rectangle());
strikeOutAnnotation->set_Title(u"Usuário Aspose");
strikeOutAnnotation->set_Color(Color::get_Blue());
auto squigglyAnnotation = MakeObject<Aspose::Pdf::Annotations::SquigglyAnnotation>(
document->get_Pages()->idx_get(1),
tfa->get_TextFragments()->idx_get(3)->get_Rectangle());
squigglyAnnotation->set_Title(u"Usuário Aspose");
squigglyAnnotation->set_Color(Color::get_Blue());
auto underlineAnnotation = MakeObject<Aspose::Pdf::Annotations::UnderlineAnnotation>(
document->get_Pages()->idx_get(1),
tfa->get_TextFragments()->idx_get(4)->get_Rectangle());
underlineAnnotation->set_Title(u"Usuário Aspose");
underlineAnnotation->set_Color(Color::get_Blue());
// Adicionar anotação à página
document->get_Pages()->idx_get(1)->get_Annotations()->Add(highlightAnnotation);
document->get_Pages()->idx_get(1)->get_Annotations()->Add(squigglyAnnotation);
document->get_Pages()->idx_get(1)->get_Annotations()->Add(strikeOutAnnotation);
document->get_Pages()->idx_get(1)->get_Annotations()->Add(underlineAnnotation);
document->Save(_dataDir + u"sample_mod.pdf");
}
catch (Exception ex)
{
Console::WriteLine(ex->get_Message());
}
}
Se você quiser destacar um fragmento de várias linhas, você deve usar um exemplo avançado:
/// <summary>
/// Exemplo avançado para você que deseja destacar um fragmento de várias linhas
/// </summary>
System::SmartPtr<Aspose::Pdf::Annotations::HighlightAnnotation> HighLightTextFragment(
System::SmartPtr<Aspose::Pdf::Page> page,
System::SmartPtr<TextFragment> textFragment,
System::SharedPtr<Color> color);
void TextMarkupAnnotations::AddHighlightAnnotationAdvanced()
{
String _dataDir("C:\\Samples\\");
auto document = MakeObject<Document>(_dataDir + u"sample_mod.pdf");
auto page = document->get_Pages()->idx_get(1);
auto tfa = MakeObject<TextFragmentAbsorber>(
u"Adobe\\W+Acrobat\\W+Reader",
MakeObject<Aspose::Pdf::Text::TextSearchOptions>(true));
tfa->Visit(page);
for (auto textFragment : tfa->get_TextFragments())
{
auto highlightAnnotation = HighLightTextFragment(page, textFragment, Color::get_Yellow());
page->get_Annotations()->Add(highlightAnnotation);
}
document->Save(_dataDir + u"sample_mod.pdf");
}
System::SmartPtr<Aspose::Pdf::Annotations::HighlightAnnotation> HighLightTextFragment(
System::SmartPtr<Aspose::Pdf::Page> page,
System::SmartPtr<TextFragment> textFragment,
System::SharedPtr<Color> color)
{
if (textFragment->get_Segments()->get_Count() == 1)
{
auto ha = MakeObject<Aspose::Pdf::Annotations::HighlightAnnotation>
(page, textFragment->get_Segments()->idx_get(1)->get_Rectangle());
ha->set_Title(u"Usuário Aspose");
ha->set_Color(color);
ha->set_Modified(DateTime::get_Now());
auto quadPoints = MakeArray<System::SharedPtr<Point>>(4);
quadPoints[0] = MakeObject<Point>(textFragment->get_Segments()->idx_get(1)->get_Rectangle()->get_LLX(),
textFragment->get_Segments()->idx_get(1)->get_Rectangle()->get_URY());
quadPoints[1] = MakeObject<Point>(textFragment->get_Segments()->idx_get(1)->get_Rectangle()->get_URX(),
textFragment->get_Segments()->idx_get(1)->get_Rectangle()->get_URY());
quadPoints[2] = MakeObject<Point>(textFragment->get_Segments()->idx_get(1)->get_Rectangle()->get_LLX(),
textFragment->get_Segments()->idx_get(1)->get_Rectangle()->get_LLY());
quadPoints[3] = MakeObject<Point>(textFragment->get_Segments()->idx_get(1)->get_Rectangle()->get_URX(),
textFragment->get_Segments()->idx_get(1)->get_Rectangle()->get_LLY());
ha->set_QuadPoints(quadPoints);
return ha;
}
auto offset = 0;
auto quadPoints = MakeArray<System::SharedPtr<Point>>(textFragment->get_Segments()->get_Count() * 4);
for (auto segment : textFragment->get_Segments())
{
quadPoints[offset + 0] = MakeObject<Point>(segment->get_Rectangle()->get_LLX(), segment->get_Rectangle()->get_URY());
quadPoints[offset + 1] = MakeObject<Point>(segment->get_Rectangle()->get_URX(), segment->get_Rectangle()->get_URY());
quadPoints[offset + 2] = MakeObject<Point>(segment->get_Rectangle()->get_LLX(), segment->get_Rectangle()->get_LLY());
quadPoints[offset + 3] = MakeObject<Point>(segment->get_Rectangle()->get_URX(), segment->get_Rectangle()->get_LLY());
offset += 4;
}
double llx = quadPoints[0]->get_X();
double lly = quadPoints[0]->get_Y();
double urx = quadPoints[0]->get_X();
double ury = quadPoints[0]->get_Y();
for (auto &pt : quadPoints) {
if (llx > pt->get_X())
llx = pt->get_X();
if (lly > pt->get_Y())
lly = pt->get_Y();
if (urx < pt->get_X())
urx = pt->get_X();
if (ury < pt->get_Y())
ury = pt->get_Y();
}
auto ha = MakeObject<Aspose::Pdf::Annotations::HighlightAnnotation>
(page, textFragment->get_Segments()->idx_get(1)->get_Rectangle());
ha->set_Title(u"Usuário Aspose");
ha->set_Color(color);
ha->set_Modified(DateTime::get_Now());
ha->set_QuadPoints(quadPoints);
return ha;
}
/// <summary>
/// Como obter um texto destacado
/// </summary>
void TextMarkupAnnotations::GetHighlightedText()
{
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"sample_mod.pdf");
auto page = document->get_Pages()->idx_get(1);
auto annotationSelector = MakeObject<Aspose::Pdf::Annotations::AnnotationSelector>(
MakeObject<Aspose::Pdf::Annotations::HighlightAnnotation>(page, Rectangle::get_Trivial()));
for (auto ta : annotationSelector->get_Selected())
{
auto ha = System::DynamicCast<Aspose::Pdf::Annotations::HighlightAnnotation>(ta);
Console::WriteLine(ha->GetMarkedText());
}
}
Obter Anotação de Marcação de Texto
Por favor, tente usar o seguinte trecho de código para obter a anotação de marcação de texto de um documento PDF.
void TextMarkupAnnotations::GetTextMarkupAnnotation()
{
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"sample_mod.pdf");
auto page = document->get_Pages()->idx_get(1);
auto annotationSelector = MakeObject<Aspose::Pdf::Annotations::AnnotationSelector>(
MakeObject<Aspose::Pdf::Annotations::HighlightAnnotation>(page, Rectangle::get_Trivial()));
for (auto ta : annotationSelector->get_Selected())
{
Console::WriteLine(u"{0} {1}", ta->get_AnnotationType(), ta->get_Rect());
}
}
Excluir Anotação de Marcação de Texto
O seguinte trecho de código mostra como excluir a anotação de marcação de texto de um arquivo PDF.
void TextMarkupAnnotations::DeleteTextMarkupAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"sample_mod.pdf");
auto page = document->get_Pages()->idx_get(1);
auto annotationSelector1 = MakeObject<Aspose::Pdf::Annotations::AnnotationSelector>(
MakeObject<Aspose::Pdf::Annotations::HighlightAnnotation>(page, Rectangle::get_Trivial()));
page->Accept(annotationSelector1);
auto annotationSelector2 = MakeObject<Aspose::Pdf::Annotations::AnnotationSelector>(
MakeObject<Aspose::Pdf::Annotations::SquigglyAnnotation>(page, Rectangle::get_Trivial()));
page->Accept(annotationSelector2);
for (auto ta : annotationSelector1->get_Selected()) {
page->get_Annotations()->Delete(ta);
}
for (auto ta : annotationSelector2->get_Selected()) {
page->get_Annotations()->Delete(ta);
}
document->Save(_dataDir + u"sample_del.pdf");
}