Anotações Extras usando C++
Como adicionar Anotação de Acento em um arquivo PDF existente
Anotação de Acento é um símbolo que indica edição de texto. Anotação de Acento também é uma anotação de marcação, então a classe Caret deriva da classe Markup e também fornece funções para obter ou definir propriedades da Anotação de Acento e redefinir o fluxo da aparência da Anotação de Acento.
Passos com os quais criamos a anotação de acento:
- Carregar o arquivo PDF - novo Document.
- Crie uma nova Anotação de Colchete e defina os parâmetros do Colchete (novo Retângulo, título, Assunto, Flags, cor, largura, EstiloInicial e EstiloFinal). Esta anotação é usada para indicar a inserção de texto.
- Crie uma nova Anotação de Colchete e defina os parâmetros do Colchete (novo Retângulo, título, Assunto, Flags, cor, largura, EstiloInicial e EstiloFinal). Esta anotação é usada para indicar a substituição de texto.
- Crie uma nova Anotação de Tachado e defina os parâmetros (novo Retângulo, título, cor, novos PontosQuad e novos pontos, Assunto, EmRespostaPara, TipoResposta).
- Depois podemos adicionar anotações à página.
O trecho de código a seguir mostra como adicionar uma Anotação de Colchete a um arquivo PDF:
using namespace System;
using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Text;
using namespace Aspose::Pdf::Annotations;
void MarkupAnnotations::AddCaretAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"sample.pdf");
// Esta anotação é usada para indicar a inserção de texto
auto caretAnnotation1 = MakeObject<CaretAnnotation>(
document->get_Pages()->idx_get(1),
MakeObject<Rectangle>(299.988, 713.664, 308.708, 720.769));
caretAnnotation1->set_Title(u"Aspose User");
caretAnnotation1->set_Subject(u"Texto inserido 1");
caretAnnotation1->set_Flags(AnnotationFlags::Print);
caretAnnotation1->set_Color(Color::get_Blue());
// Esta anotação é usada para indicar a substituição de texto
auto caretAnnotation2 = MakeObject<CaretAnnotation>(
document->get_Pages()->idx_get(1),
new Rectangle(361.246, 727.908, 370.081, 735.107));
caretAnnotation2->set_Title(u"Usuário Aspose");
caretAnnotation2->set_Flags(AnnotationFlags::Print);
caretAnnotation2->set_Subject(u"Texto inserido 2");
caretAnnotation2->set_Color(Color::get_Blue());
auto strikeOutAnnotation = MakeObject<StrikeOutAnnotation>(
document->get_Pages()->idx_get(1),
MakeObject<Rectangle>(318.407, 727.826, 368.916, 740.098));
strikeOutAnnotation->set_Color(Color::get_Blue());
strikeOutAnnotation->set_QuadPoints(
MakeArray<System::SharedPtr<Point>>({
MakeObject<Point>(321.66, 739.416),
MakeObject<Point>(365.664, 739.416),
MakeObject<Point>(321.66, 728.508),
MakeObject<Point>(365.664, 728.508) }));
strikeOutAnnotation->set_Subject(u"Riscar");
strikeOutAnnotation->set_InReplyTo(caretAnnotation2);
strikeOutAnnotation->set_ReplyType(ReplyType::Group);
document->get_Pages()->idx_get(1)->get_Annotations()->Add(caretAnnotation1);
document->get_Pages()->idx_get(1)->get_Annotations()->Add(caretAnnotation2);
document->get_Pages()->idx_get(1)->get_Annotations()->Add(strikeOutAnnotation);
document->Save(_dataDir + u"sample_caret.pdf");
}
Obter Anotação de Caret
Por favor, tente usar o seguinte trecho de código para Obter Anotação de Caret no documento PDF
void MarkupAnnotations::GetCaretAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"sample_caret.pdf");
// Filtrar anotações usando AnnotationSelector
auto page = document->get_Pages()->idx_get(1);
auto annotationSelector = MakeObject<AnnotationSelector>(
MakeObject<CaretAnnotation>(page, Rectangle::get_Trivial()));
page->Accept(annotationSelector);
auto caretAnnotations = annotationSelector->get_Selected();
// imprimir resultados
for (auto ca : caretAnnotations) {
Console::WriteLine(ca->get_Rect());
}
}
Excluir Anotação de Caret
O seguinte trecho de código mostra como Excluir Anotação de Caret de um arquivo PDF.
void MarkupAnnotations::DeleteCaretAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"sample_caret.pdf");
// Filtrar anotações usando AnnotationSelector
auto page = document->get_Pages()->idx_get(1);
auto annotationSelector = MakeObject<AnnotationSelector>(
MakeObject<CaretAnnotation>(page, Rectangle::get_Trivial()));
page->Accept(annotationSelector);
auto caretAnnotations = annotationSelector->get_Selected();
// excluir anotação
for (auto ca : caretAnnotations) {
document->get_Pages()->idx_get(1)->get_Annotations()->Delete(ca);
}
document->Save(_dataDir + u"sample_caret_del.pdf");
}
Como adicionar Anotação de Link
Uma Anotação de Link é um link de hipertexto que leva a um destino em outro lugar no documento ou a uma ação a ser executada.
Um Link é uma área retangular que pode ser colocada em qualquer lugar da página. Cada link tem uma ação PDF correspondente associada a ele. Esta ação é executada quando o usuário clica na área deste link.
O trecho de código a seguir mostra como adicionar uma Anotação de Link a um arquivo PDF usando um exemplo de número de telefone:
using namespace System;
using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Text;
void AddLinkAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"sample.pdf");
auto page = document->get_Pages()->idx_get(1);
// Criar objeto TextFragmentAbsorber para encontrar um número de telefone
auto textFragmentAbsorber = MakeObject<Aspose::Pdf::Text::TextFragmentAbsorber>("678-555-0103");
// Aceitar o absorvedor apenas para a 1ª página
page->Accept(textFragmentAbsorber);
auto phoneNumberFragment = textFragmentAbsorber->get_TextFragments()->idx_get(1);
// Criar Anotação de Link e definir a ação para chamar um número de telefone
auto linkAnnotation = MakeObject<Aspose::Pdf::Annotations::LinkAnnotation>(page, phoneNumberFragment->get_Rectangle());
linkAnnotation->set_Action(MakeObject<Aspose::Pdf::Annotations::GoToURIAction>("callto:678-555-0103"));
// Adicionar anotação à página
page->get_Annotations()->Add(linkAnnotation);
document->Save(_dataDir + u"SimpleResume_mod.pdf");
}
Obter Anotação de Link
Tente usar o seguinte trecho de código para Obter LinkAnnotation de um documento PDF.
void GetLinkAnnotations() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"SimpleResume_mod.pdf");
// Filtrar anotações usando AnnotationSelector
auto page = document->get_Pages()->idx_get(1);
auto annotationSelector = MakeObject<Aspose::Pdf::Annotations::AnnotationSelector>(
MakeObject<Aspose::Pdf::Annotations::LinkAnnotation>(page, Rectangle::get_Trivial(), Point::get_Trivial(), Point::get_Trivial()));
page->Accept(annotationSelector);
auto linkAnnotations = annotationSelector->get_Selected();
// imprimir resultados
for (auto la : linkAnnotations) {
auto l = System::DynamicCast<Aspose::Pdf::Annotations::LinkAnnotation>(la);
// Imprimir o URL de cada Anotação de Link
Console::WriteLine(u"URI: " + System::DynamicCast<Aspose::Pdf::Annotations::GoToURIAction>(l->get_Action())->get_URI());
auto absorber = MakeObject<TextAbsorber>();
absorber->get_TextSearchOptions()->set_LimitToPageBounds(true);
absorber->get_TextSearchOptions()->set_Rectangle(l->get_Rect());
page->Accept(absorber);
String extractedText = absorber->get_Text();
// Imprimir o texto associado ao hyperlink
Console::WriteLine(extractedText);
}
}
Excluir Anotação de Link
O trecho de código a seguir mostra como excluir a anotação de link de um arquivo PDF. Para isso, precisamos encontrar e remover todas as anotações de link na 1ª página. Após isso, salvaremos o documento com a anotação removida.
void DeleteLinkAnnotations()
{
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"SimpleResume_mod.pdf");
// Filtrar anotações usando AnnotationSelector
auto page = document->get_Pages()->idx_get(1);
auto annotationSelector = MakeObject<Aspose::Pdf::Annotations::AnnotationSelector>(
MakeObject<Aspose::Pdf::Annotations::LinkAnnotation>(page, Rectangle::get_Trivial(), Point::get_Trivial(), Point::get_Trivial()));
page->Accept(annotationSelector);
auto lineAnnotations = annotationSelector->get_Selected();
// imprimir resultados
for (auto la : lineAnnotations) {
page->get_Annotations()->Delete(la);
}
// Salvar documento com anotação removida
document->Save(_dataDir + u"SimpleResume_del.pdf");
}
Redigir certa região da página com Anotação de Redação usando Aspose.PDF para C++
Aspose.PDF para C++ suporta o recurso de adicionar e também manipular Anotações em um arquivo PDF existente. Recentemente, alguns de nossos clientes solicitaram a necessidade de redigir (remover texto, imagem, etc., elementos de) uma certa região da página de um documento PDF. Para atender a essa necessidade, uma classe chamada RedactionAnnotation é fornecida, que pode ser usada para redigir certas regiões da página ou pode ser usada para manipular RedactionAnnotations existentes e redigi-las (ou seja, achatar a anotação e remover o texto sob ela).
using namespace System;
using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Text;
using namespace Aspose::Pdf::Annotations;
void RedactAnnotation::AddRedactionAnnotation() {
String _dataDir("C:\\Samples\\");
// Abrir documento
auto document = MakeObject<Document>(_dataDir + u"sample.pdf");
auto page = document->get_Pages()->idx_get(1);
// Criar instância de RedactionAnnotation para região específica da página
auto annot = MakeObject<RedactionAnnotation>(page, MakeObject<Rectangle>(200, 500, 300, 600));
annot->set_FillColor(Color::get_Green());
annot->set_BorderColor(Color::get_Yellow());
annot->set_Color(Color::get_Blue());
// Texto a ser impresso na anotação de redação
annot->set_OverlayText(u"REDACTED");
annot->set_TextAlignment(HorizontalAlignment::Center);
// Repetir texto de sobreposição na anotação de redação
annot->set_Repeat(true);
// Adicionar anotação à coleção de anotações da primeira página
page->get_Annotations()->Add(annot);
// Achatar a anotação e redigir o conteúdo da página (ou seja, remove texto e imagem
// Sob a anotação redigida)
annot->Redact();
document->Save(_dataDir + u"RedactPage_out.pdf");
}
Abordagem de Facades
Aspose.PDF.Facades suporta a classe PdfAnnotationEditor, que fornece o recurso para manipular Anotações existentes dentro de um arquivo PDF.
Esta classe contém um método chamado RedactArea(..) que fornece a capacidade de remover certas regiões da página.
void RedactAnnotation::AddRedactionAnnotationViaFacades() {
String _dataDir("C:\\Samples\\");
auto editor = MakeObject<Aspose::Pdf::Facades::PdfAnnotationEditor>();
editor->BindPdf(_dataDir + u"sample.pdf");
// Redigir certa região da página
editor->RedactArea(1, MakeObject<Rectangle>(100, 100, 20, 70), System::Drawing::Color::get_White());
editor->BindPdf(_dataDir + u"sample.pdf");
editor->Save(_dataDir + u"FacadesApproach_out.pdf");
}