Adicionar Anotações de Figuras usando C++
Adicionar Anotações de Quadrado ou Círculo
As anotações de Quadrado e Círculo devem exibir, respectivamente, um retângulo ou uma elipse na página. Quando abertas, devem exibir uma janela pop-up contendo o texto da nota associada. As anotações de Quadrado são como as anotações de Círculo (instâncias da classe Aspose.Pdf.Annotations.CircleAnnotation) exceto pela forma.
Passos para criar Anotações de Quadrado e Círculo:
- Carregar o arquivo PDF - novo Document.
- Crie uma Anotação de Círculo e defina os parâmetros do Círculo (novo Retângulo, título, cor, CorInterior, Opacidade).
- Crie uma nova Anotação de Popup.
- Em seguida, precisamos criar uma Anotação de Quadrado.
- Defina os mesmos parâmetros do Quadrado (novo Retângulo, título, cor, CorInterior, Opacidade).
- Depois precisamos adicionar Anotações de Quadrado e Círculo à página.
O trecho de código a seguir mostra como adicionar Anotações de Círculo em uma página PDF.
void ShapesAnnotations::AddCircleAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"appartments.pdf");
auto page = document->get_Pages()->idx_get(1);
// Criar Anotação de Círculo
auto circleAnnotation = MakeObject<CircleAnnotation>(page, MakeObject<Rectangle>(270, 160, 483, 383));
circleAnnotation->set_Title(u"John Smith");
circleAnnotation->set_Color(Color::get_Red());
circleAnnotation->set_InteriorColor(Color::get_MistyRose());
circleAnnotation->set_Opacity(0.5);
circleAnnotation->set_Popup(MakeObject<PopupAnnotation>(page, MakeObject<Rectangle>(842, 316, 1021, 459)));
// Criar Anotação de Quadrado
auto squareAnnotation = MakeObject<SquareAnnotation>(page, MakeObject<Rectangle>(67, 317, 261, 459));
squareAnnotation->set_Title(u"John Smith");
squareAnnotation->set_Color(Color::get_Blue());
squareAnnotation->set_InteriorColor(Color::get_BlueViolet());
squareAnnotation->set_Opacity(0.25);
squareAnnotation->set_Popup(MakeObject<PopupAnnotation>(page, MakeObject<Rectangle>(842, 196, 1021, 338)));
// Adicionar anotação à página
page->get_Annotations()->Add(circleAnnotation);
page->get_Annotations()->Add(squareAnnotation);
document->Save(_dataDir + u"appartments_mod.pdf");
}
Como exemplo, veremos o seguinte resultado da adição de anotações Quadrado e Círculo a um documento PDF:
Obter Anotação de Círculo
Por favor, tente usar o seguinte trecho de código para Obter Anotação de Círculo do documento PDF.
void ShapesAnnotations::GetCircleAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"appartments_mod.pdf");
auto page = document->get_Pages()->idx_get(1);
auto annotationSelector = MakeObject<AnnotationSelector>(
new CircleAnnotation(page, Rectangle::get_Trivial()));
page->Accept(annotationSelector);
auto circleAnnotations = annotationSelector->get_Selected();
// imprimir resultados
for (auto ca : circleAnnotations) {
Console::WriteLine(ca->get_Rect());
}
}
Excluir Anotação de Círculo
O seguinte trecho de código mostra como Excluir Anotação de Círculo do arquivo PDF.
void ShapesAnnotations::DeleteCircleAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"appartments_mod.pdf");
auto page = document->get_Pages()->idx_get(1);
auto annotationSelector = MakeObject<AnnotationSelector>(
new CircleAnnotation(page, Rectangle::get_Trivial()));
page->Accept(annotationSelector);
auto circleAnnotations = annotationSelector->get_Selected();
for (auto ca : circleAnnotations) {
page->get_Annotations()->Delete(ca);
}
document->Save(_dataDir + u"appartments_del.pdf");
}
Adicionar Anotações de Polígono e Polilinha
A ferramenta Polilinha permite criar formas e contornos com um número arbitrário de lados no documento.
Anotações de Polígono representam polígonos em uma página. Eles podem ter qualquer número de vértices conectados por linhas retas.
Anotações de Polilinha são também semelhantes aos polígonos, a única diferença é que os primeiros e últimos vértices não estão implicitamente conectados.
Passos com os quais criamos anotações de Polígono e Polilinha:
- Carregar o arquivo PDF - novo Document.
- Criar nova Polygon Annotation e definir os parâmetros do Polígono (novo Retângulo, novos Pontos, título, cor, InteriorColor e Opacidade).
- Criar uma nova PopupAnnotation.
- Em seguida, Crie uma Anotação PolyLine e repita todas as ações.
- Depois, podemos adicionar anotações à página.
O trecho de código a seguir mostra como adicionar Anotações de Polígono e Polilinha a um arquivo PDF:
void ShapesAnnotations::AddPolygonAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"appartments.pdf");
auto page = document->get_Pages()->idx_get(1);
// Criar Anotação de Polígono
auto points = MakeArray<System::SharedPtr<Point>>({
MakeObject<Point>(274, 381),
MakeObject<Point>(555, 381),
MakeObject<Point>(555, 304),
MakeObject<Point>(570, 304),
MakeObject<Point>(570, 195),
MakeObject<Point>(274, 195) });
auto polygonAnnotation =
MakeObject<PolygonAnnotation>(page,
MakeObject<Rectangle>(270, 193, 571, 383),
points);
polygonAnnotation->set_Title(u"John Smith");
polygonAnnotation->set_Color(Color::get_Blue());
polygonAnnotation->set_InteriorColor(Color::get_BlueViolet());
polygonAnnotation->set_Opacity(0.25);
polygonAnnotation->set_Popup(MakeObject<PopupAnnotation>(page, MakeObject<Rectangle>(842, 196, 1021, 338)));
// Criar Anotação PoliLine
auto polylineAnnotation = MakeObject<PolylineAnnotation>(page, MakeObject<Rectangle>(270, 193, 571, 383),
MakeArray<System::SharedPtr<Point>>({
MakeObject<Point>(545, 150),
MakeObject<Point>(545, 190),
MakeObject<Point>(667, 190),
MakeObject<Point>(667, 110),
MakeObject<Point>(626, 111)}));
polygonAnnotation->set_Title(u"John Smith");
polygonAnnotation->set_Color(Color::get_Red());
polygonAnnotation->set_Popup(MakeObject<PopupAnnotation>(page, MakeObject<Rectangle>(842, 196, 1021, 338)));
// Adicionar anotação à página
page->get_Annotations()->Add(polygonAnnotation);
page->get_Annotations()->Add(polylineAnnotation);
document->Save(_dataDir + u"appartments_mod.pdf");
}
Obter Anotações de Polígono e Polilinha
Por favor, tente usar o seguinte trecho de código para Obter Anotações de Polígono e Polilinha em documento PDF.
void ShapesAnnotations::GetPolyAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"appartments_mod.pdf");
auto page = document->get_Pages()->idx_get(1);
auto annotationSelector = MakeObject<AnnotationSelector>(
MakeObject<PolylineAnnotation>(page, Rectangle::get_Trivial(), nullptr));
page->Accept(annotationSelector);
auto polyAnnotations = annotationSelector->get_Selected();
for (auto pa : polyAnnotations) {
Console::WriteLine(u"{0}", pa->get_Rect());
}
}
Excluir Anotações de Polígono e Polilinha
O seguinte trecho de código mostra como Excluir Anotações de Polígono e Polilinha de um arquivo PDF.
void ShapesAnnotations::DeletePolyAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"appartments_mod.pdf");
auto page = document->get_Pages()->idx_get(1);
auto annotationSelector = MakeObject<AnnotationSelector>(
new PolylineAnnotation(page, Rectangle::get_Trivial(), nullptr));
page->Accept(annotationSelector);
auto polyAnnotations = annotationSelector->get_Selected();
for (auto pa : polyAnnotations) {
page->get_Annotations()->Delete(pa);
}
document->Save(_dataDir + u"Appartments_del.pdf");
}
Como adicionar Anotação de Linha em um arquivo PDF existente
O propósito de uma Anotação de Linha é exibir uma única linha reta na página. Quando aberta, ela deve exibir uma janela pop-up contendo o texto da nota associada. Esta funcionalidade inclui entradas adicionais específicas para uma anotação de linha. Estas entradas são criptografadas na forma de letras, por exemplo, LL, BS, IC, e assim por diante.
Além disso, a Anotação de Linha pode incluir uma legenda, que é especificada ao definir Cap como true
.
A próxima funcionalidade permite o efeito de aplicar uma legenda a uma Anotação de Linha que possui um deslocamento de líder.
Também, este tipo de anotação permite definir estilos de término de Linha.
Passos com os quais criamos uma anotação de Linha:
- Carregar o arquivo PDF - novo Document.
- Crie uma nova Line Annotation e defina os parâmetros da linha (novo Retângulo, novo Ponto, título, cor, largura, StartingStyle e EndingStyle).
- Crie uma nova PopupAnnotation
- Depois podemos adicionar a anotação à página
O trecho de código a seguir mostra como adicionar uma Anotação de Linha a um arquivo PDF:
using namespace System;
using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Text;
void AddLineAnnotation() {
String _dataDir ("C:\\Samples\\");
try {
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"appartments.pdf");
auto page = document->get_Pages()->idx_get(1);
// Criar Anotação de Linha
auto lineAnnotation = MakeObject<Aspose::Pdf::Annotations::LineAnnotation>(
page, new Rectangle(550, 93, 562, 439),
new Point(556, 99), new Point(556, 443));
lineAnnotation->set_Title(u"John Smith");
lineAnnotation->set_Color(Color::get_Red());
lineAnnotation->set_Width(3);
lineAnnotation->set_StartingStyle(Aspose::Pdf::Annotations::LineEnding::OpenArrow);
lineAnnotation->set_EndingStyle(Aspose::Pdf::Annotations::LineEnding::OpenArrow);
lineAnnotation->set_Popup(MakeObject<Aspose::Pdf::Annotations::PopupAnnotation>(page, new Rectangle(842, 124, 1021, 266)));
// Adicionar anotação à página
page->get_Annotations()->Add(lineAnnotation);
document->Save(_dataDir + u"appartments_mod.pdf");
}
catch (Exception ex) {
Console::WriteLine(ex->get_Message());
}
}
Obter Anotação de Linha
Por favor, tente usar o seguinte trecho de código para Obter Anotação de Linha em um documento PDF.
void GetLineAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"appartments_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::LineAnnotation>(page, Rectangle::get_Trivial(), Point::get_Trivial(), Point::get_Trivial()));
page->Accept(annotationSelector);
auto lineAnnotations = annotationSelector->get_Selected();
// imprimir resultados
for (auto la : lineAnnotations) {
auto l = System::DynamicCast<Aspose::Pdf::Annotations::LineAnnotation>(la);
Console::WriteLine(u"[{0},{1}] [{2},{3}]",
l->get_Starting()->get_X(),l->get_Starting()->get_Y(),
l->get_Ending()->get_X(), l->get_Ending()->get_Y());
}
}
Excluir Anotação de Linha
O trecho de código a seguir mostra como Excluir Anotação de Linha de um arquivo PDF.
void DeleteLineAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"appartments_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::LineAnnotation>(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);
}
document->Save(_dataDir + u"appartments_del.pdf");
}
Como adicionar Anotação de Tinta ao arquivo PDF
Uma Anotação de Tinta representa um “rabisco” feito à mão livre composto por um ou mais caminhos disjuntos. Quando aberto, ele deverá exibir uma janela pop-up contendo o texto da nota associada.
O InkAnnotation representa um rabisco à mão livre composto por um ou mais pontos disjuntos. Por favor, tente usar o seguinte trecho de código para adicionar InkAnnotation no documento PDF.
void ShapesAnnotations::AddInkAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"appartments.pdf");
auto page = document->get_Pages()->idx_get(1);
auto arect = MakeObject<Rectangle>(320.086, 189.286, 384.75, 228.927);
auto inkList = MakeObject<System::Collections::Generic::List<System::SmartPtr<System::Array<System::SmartPtr<Aspose::Pdf::Point>>>>>();
// dados em ppts, recebidos de um mouse ou outro dispositivo apontador
double ppts[] = { 328.002, 222.017, 328.648, 222.017, 329.294, 222.017, 329.617, 222.34, 330.91, 222.663,
331.556, 222.663, 332.203, 222.986, 333.495, 223.633, 334.141, 223.956, 334.788, 224.279, 335.434,
224.602, 336.08, 224.602, 336.727, 224.925, 337.373, 225.248, 337.696, 225.248, 338.342, 225.572,
338.989, 225.895, 341.897, 225.895, 343.513, 226.218, 346.098, 226.218, 348.683, 226.541, 350.622,
226.541, 352.238, 226.541, 353.208, 226.541, 353.854, 226.541, 355.146, 226.541, 356.439, 226.541,
357.732, 226.541, 358.378, 226.541, 359.024, 226.541, 360.64, 226.541, 361.286, 226.541, 361.933,
226.541, 362.256, 226.541, 362.902, 226.541, 363.548, 226.541, 363.872, 226.541, 363.872, 226.218,
365.164, 226.218, 365.487, 226.218, 365.811, 226.218, 367.103, 226.218, 367.749, 226.218, 368.719,
226.218, 370.012, 226.218, 370.981, 226.218, 371.627, 226.218, 372.597, 225.895, 372.92, 225.895,
373.243, 225.895, 373.243, 225.572, 373.566, 225.572, 374.213, 225.248, 374.536, 225.248, 375.182,
224.602, 375.182, 224.279, 375.828, 223.956, 376.475, 223.31, 377.121, 222.986, 377.767, 222.986,
378.414, 222.017, 379.383, 221.371, 379.706, 220.724, 380.029, 219.432, 380.676, 219.109, 380.676,
218.462, 381.645, 217.493, 381.968, 217.17, 381.968, 216.523, 382.291, 215.554, 382.615, 215.231,
382.615, 214.261, 382.938, 213.292, 382.938, 212.645, 382.938, 211.999, 382.938, 211.353, 382.938,
210.707, 382.938, 209.737, 382.938, 208.768, 382.938, 208.444, 382.615, 207.475, 382.615, 206.829,
382.291, 206.505, 382.291, 205.859, 381.968, 204.89, 381.968, 204.243, 381.645, 203.92, 380.999,
203.274, 380.999, 202.951, 380.676, 202.305, 380.353, 201.658, 380.029, 201.335, 380.029, 200.689,
380.029, 200.366, 379.383, 199.719, 379.06, 199.719, 378.737, 199.073, 377.767, 198.103, 377.121,
197.780, 376.475, 197.457, 375.505, 196.488, 374.859, 196.165, 374.536, 195.841, 372.92, 195.195,
371.951, 194.549, 370.658, 194.226, 368.719, 193.902, 367.426, 193.256, 366.457, 193.256, 363.872,
192.933, 362.902, 192.933, 361.61, 192.61, 359.024, 192.61, 357.409, 192.61, 356.439, 192.61,
353.531, 192.61, 352.561, 192.61, 350.945, 192.61, 349.007, 192.933, 348.36, 193.256, 347.391,
193.256, 346.098, 193.902, 345.452, 193.902, 344.806, 193.902, 343.513, 193.902, 342.867, 193.902,
342.220, 193.902, 341.574, 193.902, 341.251, 194.226, 340.928, 194.226, 340.928, 194.549, 340.605,
194.549, 340.605, 194.872, 339.635, 195.195, 339.635, 195.518, 338.989, 195.518, 338.989, 195.841,
338.666, 196.165, 338.019, 196.811, 338.019, 197.134, 337.373, 197.457, 336.404, 198.427, 335.757,
198.427, 335.434, 198.75, 334.141, 199.719, 333.818, 199.719, 333.818, 200.042, 332.849, 200.366,
332.203, 200.366, 331.556, 201.335, 330.91, 201.981, 330.587, 202.305, 330.264, 202.305, 329.294,
202.628, 328.971, 202.951, 328.002, 203.274, 328.002, 203.597, 327.355, 204.243, 326.709, 204.567,
326.386, 204.89, 326.063, 205.536, 325.416, 205.859, 325.093, 205.859, 324.447, 205.859, 324.124,
206.182, 324.124, 206.505, 323.477, 206.829, 323.477, 207.152, 323.477, 207.798, 322.831, 207.798,
322.831, 208.121, 322.831, 208.444, 322.508, 208.444, 322.508, 209.091, 322.185, 209.414, 322.185,
209.737, 322.185, 210.383, 322.185, 211.03, 322.185, 211.353, 322.185, 211.676, 322.185, 212.322,
323.154, 213.292, 323.154, 213.938, 324.447, 214.584, 325.093, 215.877, 325.416, 216.2, 325.416,
216.846, 325.739, 217.17, 326.063, 217.493, 326.386, 218.139, 326.709, 218.139, 326.709, 218.462,
327.032, 219.109, 327.032, 219.432, 327.032, 219.755, 327.355, 220.078, 327.355, 220.401, 327.678,
221.371, 328.002, 221.371, 328.002, 222.017, 328.325, 222.663, 328.648, 222.663, 328.971, 222.986,
329.294, 223.31, 329.617, 223.956, 329.617, 224.279 };
auto points = MakeArray<System::SmartPtr<Aspose::Pdf::Point>>();
// converter dados para pontos
for (int i = 0, j = 0; i < _countof(ppts) / 2; i++, j += 2) {
points->Add(MakeObject<Point>(ppts[j], ppts[j + 1]));
}
inkList->Add(points);
auto ia = MakeObject<InkAnnotation>(page, arect, inkList);
ia->set_Title(u"Aspose User");
ia->set_Color(Color::get_Red());
ia->set_CapStyle(CapStyle::Rounded);
auto border = MakeObject<Border>(ia);
border->set_Width(3);
ia->set_Opacity(0.75);
page->get_Annotations()->Add(ia);
document->Save(_dataDir + u"appartments_mod.pdf");
}
Obter InkAnnotation
Por favor, tente usar o seguinte trecho de código para obter InkAnnotation em um documento PDF.
void ShapesAnnotations::GetInkAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"appartments_mod.pdf");
auto page = document->get_Pages()->idx_get(1);
// Filtrar anotações usando AnnotationSelector
auto annotationSelector = MakeObject<AnnotationSelector>(
MakeObject<InkAnnotation>(page, Rectangle::get_Trivial(), nullptr));
page->Accept(annotationSelector);
auto inkAnnotations = annotationSelector->get_Selected();
// imprimir resultados
for (auto ia : inkAnnotations) {
Console::WriteLine(ia->get_Rect());
}
}
Excluir InkAnnotation
O seguinte trecho de código mostra como excluir InkAnnotation de um arquivo PDF.
void ShapesAnnotations::DeleteInkAnnotation() {
String _dataDir("C:\\Samples\\");
// Carregar o arquivo PDF
auto document = MakeObject<Document>(_dataDir + u"appartments_mod.pdf");
auto page = document->get_Pages()->idx_get(1);
// Filtrar anotações usando AnnotationSelector
auto annotationSelector = MakeObject<AnnotationSelector>(
MakeObject<InkAnnotation>(page, Rectangle::get_Trivial(), nullptr));
page->Accept(annotationSelector);
auto InkAnnotations = annotationSelector->get_Selected();
for (auto ca : InkAnnotations) {
page->get_Annotations()->Delete(ca);
}
document->Save(_dataDir + u"appartments_del.pdf");
}