Anotar PDF

Este blog es una continuación de nuestro blog anterior, en el que destacamos algunas características interesantes de Aspose.PDF Cloud SDK para Java sobre cómo agregar Resaltar o tachar texto y agregar anotaciones de línea o círculo en PDF mediante la API REST de Java. En este artículo, analizaremos en particular los detalles sobre cómo agregar anotaciones de texto, polilíneas, líneas onduladas y adjuntos dentro de documentos PDF mediante el lenguaje de programación Java.

Aspose.PDF Cloud es una API REST que permite a los usuarios crear, manipular y convertir archivos PDF existentes en otros formatos de documentos compatibles. Se puede acceder a la API de Cloud mediante los dos métodos siguientes:

  • Acceda a la API mediante comandos cURL
  • Acceda a la API en el lenguaje de programación Java

Analicemos más a fondo la adición de varias anotaciones a documentos PDF utilizando comandos cURL y código Java.

Agregar anotaciones mediante el comando cURL

Los comandos cURL son una de las formas más sencillas y geniales de acceder a las API REST. Hablemos ahora de cómo añadir las diferentes anotaciones mediante los comandos cURL. Ten en cuenta que cada API también te permite acceder al almacenamiento en la nube, donde se pueden almacenar archivos para su procesamiento, por lo que, para garantizar la integridad de los datos, nuestras API solo son accesibles para personas autorizadas. Por lo tanto, primero debes visitar el panel de control de Aspose.Cloud y, si tienes una cuenta de GitHub o Google, simplemente regístrate. De lo contrario, haz clic en el botón Crear una nueva cuenta y proporciona la información requerida. Ahora inicia sesión en el panel de control con tus credenciales, expande la sección Aplicaciones desde el panel de control y desplázate hacia abajo hasta la sección Credenciales del cliente para ver los detalles de ID de cliente y Secreto de cliente.

Ahora el siguiente paso es generar un JSON Web Token (JWT) para que las API sean accesibles a través del símbolo del sistema.

curl -v "https://api.aspose.cloud/connect/token" \
-X POST \
-d "grant_type=client_credentials&client_id=7042694c-5251-4aba-83c9-e81e7518724f&client_secret=db246d4742e8cd22e7266c9391992689" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json"

Anotación de texto

Una anotación de texto es una anotación adjunta a una ubicación específica en un documento PDF. Cuando está cerrada, la anotación se muestra como un ícono; cuando está abierta, debe mostrar una ventana emergente que contiene el texto de la nota en la fuente y el tamaño elegidos por el lector. Para agregar la anotación de texto, necesitamos usar la API PostPageTextAnnotation. Use el siguiente comando cURL para agregar una anotación de texto con el ícono de nota.

 curl -X POST "https://api.aspose.cloud/v3.0/pdf/PdfWithBookmarks.pdf/pages/1/annotations/text" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>" \
-H  "Content-Type: application/json" \
-d "[{  \"Color\": {  \"A\": 0, \"R\": 0xDA,  \"G\": 0xA5, \"B\": 0x20    },  \"Contents\": \"Hello World \",  \"Modified\": \"05/26/2021 03:10:00.000 PM\",    \"Id\": \"1\",    \"Flags\": [      \"Default\"    ],    \"Name\": \"string\",    \"Rect\": {      \"LLX\": 100,      \"LLY\": 800,      \"URX\": 100,      \"URY\": 100    },    \"PageIndex\": 1,    \"ZIndex\": 1,    \"HorizontalAlignment\": \"Center\",    \"VerticalAlignment\": \"Center\",    \"CreationDate\": \"string\",    \"Subject\": \"Subject of Annotation\",    \"Title\": \"Annotation Title\",    \"RichText\": \"string\",    \"State\": \"Undefined\",    \"Open\": true,    \"Icon\": \"Note\"  }]"
Anotación de texto en PDF

Imagen 1:- Anotación de texto con ícono de nota en archivo PDF.

Los archivos PDF de muestra utilizados en el ejemplo anterior se pueden descargar desde los siguientes enlaces

Anotación de polilínea

Las anotaciones de polilínea se utilizan para dibujar a mano polilíneas en una página. Pueden contener cualquier cantidad de lados definidos por los vértices de la polilínea. Las anotaciones de polilínea con color de relleno transparente solo se pueden seleccionar alrededor de sus líneas visibles. Las anotaciones de polilínea también se pueden agregar mediante la API PostPagePolyLineAnnotations.

curl -X POST "https://api.aspose.cloud/v3.0/pdf/PdfWithTable.pdf/pages/1/annotations/polyline" \
-H  "accept: application/json" \
-H  "authorization: Bearer " \
-H  "Content-Type: application/json" \
-d "[  {       \"Color\": {      \"A\": 0,      \"R\": 122,      \"G\": 132,      \"B\": 255    },    \"Contents\": \"Hello World...\",    \"Modified\": \"05/26/2021 03:10:00.000 PM\",    \"Id\": \"1\",    \"Flags\": [      \"Default\"    ],    \"Name\": \"Polyline\",    \"Rect\": {      \"LLX\": 100,      \"LLY\": 200,      \"URX\": 150,      \"URY\": 250    },    \"PageIndex\": 1,    \"ZIndex\": 1,    \"HorizontalAlignment\": \"Center\",    \"VerticalAlignment\": \"Center\",    \"CreationDate\": \"05/26/2021 03:10:00.000 PM\",    \"Subject\": \"Subject of Annotation\",    \"Title\": \"Title of Annotation\",    \"RichText\": \"<?xml version=\\\"1.0\\\"?><body xmlns=\\\"http://www.w3.org/1999/xhtml\\\" xmlns:xfa=\\\"http://www.xfa.org/schema/xfa-data/1.0/\\\" xfa:APIVersion=\\\"Acrobat:7.0.0\\\" xfa:spec=\\\"2.0.2\\\" ><span style=\\\"text-decoration:;font-size:10.0pt\\\">Contents</span></body>\",    \"InteriorColor\": {      \"A\": 255,      \"R\": 120,      \"G\": 110,      \"B\": 255    },    \"StartingStyle\": \"Circle\",    \"EndingStyle\": \"OpenArrow\",    \"Intent\": \"PolyLineDimension\",    \"Vertices\": [      {            \"X\": 164.611,            \"Y\": 499.629          },          {            \"X\": 192.858,            \"Y\": 509.857          },          {            \"X\": 226.461,            \"Y\": 493.785          }    ]  }]"

Anotación ondulada

annotpdf - npm

Las anotaciones subrayadas con líneas onduladas o irregulares ayudan a resaltar la información dentro del documento. Se pueden agregar mediante la API PostPageSquigglyAnnotations. El siguiente comando le ayudará a agregar una anotación con líneas onduladas al documento PDF.

curl -X POST "https://api.aspose.cloud/v3.0/pdf/PdfWithTable.pdf/pages/1/annotations/squiggly" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>" \
-H  "Content-Type: application/json" \
-d "[  {    \"Color\": {      \"A\": 255,      \"R\": 120,      \"G\": 123,      \"B\": 150    },    \"Contents\": \"A squiggly Annotation\",    \"Modified\": \"05/26/2021 03:10:00.000 PM\",    \"Id\": \"1\",    \"Flags\": [      \"Default\"    ],    \"Name\": \"First Annotation\",    \"Rect\": {      \"LLX\": 100,      \"LLY\": 300,      \"URX\": 120,      \"URY\": 330    },    \"PageIndex\": 1,    \"ZIndex\": 1,    \"HorizontalAlignment\": \"Center\",    \"VerticalAlignment\": \"Center\",    \"CreationDate\": \"05/26/2021 03:10:00.000 PM\",    \"Subject\": \"Subject \",    \"Title\": \"Title of Squiggly\",     \"Starting\": {      \"X\": 162.663,      \"Y\": 654.5    },    \"StartingStyle\": \"Circle\",    \"Ending\": {      \"X\": 230.845,      \"Y\": 654.5    },    \"EndingStyle\": \"OpenArrow\",    \"InteriorColor\": {      \"A\": 255,      \"R\": 220,      \"G\": 220,      \"B\": 220    },    \"LeaderLine\": 10,    \"LeaderLineExtension\": 5,    \"LeaderLineOffset\": 2.5,    \"ShowCaption\": true,    \"CaptionOffset\": {      \"X\": 7,      \"Y\": 8    },    \"CaptionPosition\": \"Top\",    \"Intent\": \"LineArrow\",\"RichText\": \"string\",    \"QuadPoints\": [      {        \"X\": 100,        \"Y\": 200      }    ]  }]"

Anotación de adjuntos

Se pueden agregar varios archivos como anotaciones adjuntas al documento PDF y, para cumplir con este requisito, se puede utilizar la API PostPageFileAttachmentAnnotations. Ejecute el siguiente comando cURL para adjuntar un archivo existente al documento PDF. En nuestro ejemplo, se utiliza como archivo adjunto el archivo denominado PdfWithTable.pdf (ya disponible en el almacenamiento en la nube).

curl -X POST "https://api.aspose.cloud/v3.0/pdf/PdfWithBookmarks.pdf/pages/1/annotations/fileattachment" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>" \
-H  "Content-Type: application/json" \
 -d "[  {       \"Color\": {      \"A\": 255,      \"R\": 120,      \"G\": 120,      \"B\": 120    },    \"Contents\": \"Content\",    \"Modified\": \"05/26/2021 03:10:00.000 PM\",    \"Id\": \"1\",    \"Flags\": [      \"Default\"    ],    \"Name\": \"FileAttachment\",    \"Rect\": {      \"LLX\": 100,      \"LLY\": 200,      \"URX\": 120,      \"URY\": 2200    },    \"PageIndex\": 1,    \"ZIndex\": 0,    \"HorizontalAlignment\": \"Center\",    \"VerticalAlignment\": \"Top\",    \"CreationDate\": \"05/26/2021 03:10:00.000 PM\",    \"Subject\": \"Subject\",    \"Title\": \"Title\",    \"RichText\": \"string\",    \"Icon\": \"PushPin\",    \"Opacity\": 0,    \"FileDescription\": \"string\",    \"FileName\": \"PdfWithTable.pdf\",    \"FilePath\": \"PdfWithTable.pdf\"  }]"

Agregar anotaciones mediante Java

Además de los comandos cURL, otro método para utilizar nuestras API en la nube es acceder a ellas a través de los SDK de programación. Hemos desarrollado los SDK de programación para los lenguajes de programación más populares. Por lo tanto, para trabajar con anotaciones en PDF con el lenguaje Java, intente utilizar Aspose.PDF Cloud SDK for Java.

El primer paso es instalar el SKD en el sistema. El SDK de Cloud está disponible para descargar en Maven y GitHub. Ahora, agregue los siguientes detalles en su archivo pom.xml para descargar y usar Aspose.Pdf.jar en su proyecto de compilación de Maven.

<repositories>
 <repository>
        <id>aspose-cloud</id>
        <name>artifact.aspose-cloud-releases</name>
        <url>https://artifact.aspose.cloud/repo</url>
    </repository>   
</repositories>
<dependencies>
 <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-pdf-cloud</artifactId>
        <version>21.1.0</version>
        <scope>compile</scope>
    </dependency>
 </dependencies>

Para obtener más información, visita Cómo instalar los SDK de Aspose.Cloud.

Anotaciones de texto

A continuación se detallan los pasos para agregar anotaciones de texto a los documentos PDF.

  • El primer paso es crear un objeto PdfApi donde proporcionamos ClientID y ClientSecret como argumentos
  • Luego creamos el objeto Rectangle donde se agrega la anotación
    • LLX - Coordenada X de la esquina inferior izquierda.
    • LLY - Y - coordenada de la esquina inferior izquierda.
    • URY - X - coordenada de la esquina superior derecha.
    • URY - Y - coordenada de la esquina superior derecha.
  • Creamos el objeto TextAnnotation donde definimos la alineación usando el método setHorizontalAlignment(..).Establecemos el sujeto usando el método setSubject(…), el estado predeterminado usando el método setState(…), etc.
  • Luego crea el objeto ArrayList<> del tipo TextAnnotation y agrégale el objeto TextAnnotation creado anteriormente.
  • Por último, llamamos a postPageTextAnnotations(…) donde pasamos el nombre del archivo PDF de entrada, PageNumber y la ArrayList de anotaciones creada anteriormente como argumentos.
// Obtenga ClientID y ClientSecret desde https://dashboard.aspose.cloud/
String clientId = "7042694c-5251-4aba-83c9-e81e7518724f";
String clientSecret = "db246d4742e8cd22e7266c9391992689";
				
// instancia createPdfApi
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// documento PDF de entrada
String name = "PdfWithTable.pdf";	        
			    
// Cargar el archivo desde el sistema local
File file = new File("/Users/nayyershahbaz/Downloads/" + name);
// Sube el archivo al almacenamiento en la nube
FilesUploadResult uploadResponse = pdfApi.uploadFile(name, file, null);
				
// Número de página donde se debe agregar la anotación
int pageNumber = 1;

// Crea un objeto Rectángulo donde se agrega la Anotación
Rectangle rect = new Rectangle()
    .LLX(100.)
    .LLY(600.)
    .URX(200.)
    .URY(650.);

// Crear una matriz de listas de indicadores de anotación
List<AnnotationFlags> flags = new ArrayList<>();
flags.add(AnnotationFlags.DEFAULT);

// Crear objeto TextAnnotation
TextAnnotation textAnnotation = new TextAnnotation();
textAnnotation.setName("Annotation Name");
textAnnotation.setRect(rect);
textAnnotation.setFlags(flags);
textAnnotation.setHorizontalAlignment(HorizontalAlignment.CENTER);

// Establece el contenido que se mostrará dentro de Anotación
textAnnotation.contents("Hello World...");
// Establecer el icono para la anotación
textAnnotation.icon(TextIcon.KEY);

textAnnotation.setSubject("Text Box Subj");
textAnnotation.setZindex(1);

// el estado predeterminado del objeto de anotación
textAnnotation.setState(AnnotationState.COMPLETED);
		        
// crear ListArray de TextAnnotation
List<TextAnnotation> annotations = new ArrayList<>();

// Agregue la anotación de texto creada anteriormente a la instancia de lista
annotations.add(textAnnotation);

// Llamar al método para agregar una anotación al archivo PDF
AsposeResponse response = pdfApi.postPageTextAnnotations(name, pageNumber, annotations, null, null);
assertEquals(200, (int)response.getCode());

Anotaciones de polilíneas

El SDK de Cloud también ofrece las mismas funciones para agregar anotaciones de polilíneas a documentos PDF. A continuación, se detallan los pasos y el fragmento de código para cumplir con este requisito.

  • En primer lugar, necesitamos crear una instancia de PdfApi y cargar el archivo fuente al almacenamiento en la nube.
  • Crea un ArrayList de tipo Point que define los puntos en los que se dibujarán las polilíneas.
  • El siguiente paso es crear un objeto PolyLineAnnotation donde definimos la región rectangular y pasamos Points ListArray al método setVertices(…).
  • Para establecer el color interior, utilice el método setInteriorColor(…) y pase la instancia Color como argumento.
  • Ahora, llame a los métodos startingStyle(…) y endingStyle(…) para definir el estilo inicial y final de la anotación. Estos métodos toman el valor de la enumeración LineEnding como argumentos.
  • Por último, llame al método postPagePolyLineAnnotations(…) de la clase PdfApi para representar la anotación dentro del documento PDF.
// Obtenga ClientID y ClientSecret desde https://dashboard.aspose.cloud/
String clientId = "a41d01ef-dfd5-4e02-ad29-bd85fe41e3e4";
String clientSecret = "d87269aade6a46cdc295b711e26809af";
				
// instancia createPdfApi
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// documento PDF de entrada
String name = "PdfWithTable.pdf";	        
			    
// Cargar el archivo desde el sistema local
File file = new File("/Users/nayyershahbaz/Downloads/" + name);
// Sube el archivo al almacenamiento en la nube
FilesUploadResult uploadResponse = pdfApi.uploadFile(name, file, null);
				
// Número de página del archivo de entrada donde se agregará la anotación.
int pageNumber = 1;

// región rectangular para la anotación
Rectangle rect = new Rectangle()
    .LLX(100.)
    .LLY(600.)
    .URX(200.)
    .URY(650.);

// Especifica los vértices para la anotación.
List<Point> vertices = new ArrayList();
vertices.add(new Point().X(10.).Y(10.));
vertices.add(new Point().X(20.).Y(10.));
vertices.add(new Point().X(10.).Y(20.));
vertices.add(new Point().X(10.).Y(10.));

List<AnnotationFlags> flags = new ArrayList<>();
flags.add(AnnotationFlags.DEFAULT);

// crear objeto PolyLineAnnotation
PolyLineAnnotation annotation = new PolyLineAnnotation();
annotation.setName("Name");
annotation.setRect(rect);
annotation.setFlags(flags);
// Establecer la alineación horizontal de la anotación
annotation.setHorizontalAlignment(HorizontalAlignment.CENTER);
annotation.contents("Rich Text in the PDF File...");
annotation.setSubject("Subj");
annotation.setZindex(1);
annotation.setTitle("Title");

// crear objeto de color
Color color = new Color();
color.setA(255);
color.setR(120);
color.setG(140);
color.setB(130);

// Establezca el color interno para la instancia de anotación
annotation.setInteriorColor(color);
		        
annotation.setVertices(vertices);
// Especifica el estilo inicial para la anotación.
annotation.startingStyle(LineEnding.OPENARROW);

// Establezca el estilo final para la anotación
annotation.endingStyle(LineEnding.SQUARE);

List<PolyLineAnnotation> annotations = new ArrayList<>();
annotations.add(annotation);
		        
// Llamar al método para agregar una anotación de polilínea a la primera página del documento.
AsposeResponse response = pdfApi.postPagePolyLineAnnotations(name, pageNumber, annotations, null, null);
assertEquals(200, (int)response.getCode());

Anotaciones onduladas

Se utiliza una clase independiente denominada SquigglyAnnotation para agregar anotaciones Squiggly al documento PDF. El fragmento de código que se muestra a continuación se puede utilizar para agregar anotaciones Squiggly al archivo PDF disponible en el almacenamiento en la nube.

// Obtenga ClientID y ClientSecret desde https://dashboard.aspose.cloud/
String clientId = "a41d01ef-dfd5-4e02-ad29-bd85fe41e3e4";
String clientSecret = "d87269aade6a46cdc295b711e26809af";
				
// instancia createPdfApi
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// documento PDF de entrada
String name = "PdfWithTable.pdf";	        
			    
// Cargar el archivo desde el sistema local
File file = new File("/Users/nayyershahbaz/Downloads/" + name);
// Sube el archivo al almacenamiento en la nube
FilesUploadResult uploadResponse = pdfApi.uploadFile(name, file, null);
				
// Número de página del archivo de entrada donde se agregará la anotación.
int pageNumber = 1;

// región rectangular para la anotación
Rectangle rect = new Rectangle()
    .LLX(100.)
    .LLY(600.)
    .URX(200.)
    .URY(650.);

// Especifica los vértices para la anotación.
List<Point> vertices = new ArrayList();
vertices.add(new Point().X(10.).Y(10.));
vertices.add(new Point().X(20.).Y(10.));
vertices.add(new Point().X(10.).Y(20.));
vertices.add(new Point().X(10.).Y(10.));

List<AnnotationFlags> flags = new ArrayList<>();
flags.add(AnnotationFlags.DEFAULT);

// crear objeto SquigglyAnnotation
SquigglyAnnotation annotation = new SquigglyAnnotation();
annotation.setName("Name");
annotation.setRect(rect);
annotation.setFlags(flags);
annotation.setHorizontalAlignment(HorizontalAlignment.CENTER);
annotation.contents("Rich Text in the PDF File...");
annotation.setSubject("Subj");
annotation.setZindex(1);
annotation.setTitle("Title");
annotation.setModified("28/05/2021 00:00:00.000 AM");
		        
// crear objeto de color
Color color = new Color();
color.setA(155);
color.setR(120);
color.setG(140);
color.setB(130);

// Establezca el color interno para la instancia de anotación
annotation.color(color);

// establecer puntos de anotación		        
annotation.setQuadPoints(vertices);

List<SquigglyAnnotation> annotations = new ArrayList<>();
annotations.add(annotation);
		        
// Llamar al método para agregar una anotación ondulada a la primera página del documento.
AsposeResponse response = pdfApi.postPageSquigglyAnnotations(name, pageNumber, annotations, null, null);
assertEquals(200, (int)response.getCode());

Anotaciones en archivos adjuntos

Para agregar la anotación del archivo adjunto, intente usar el siguiente fragmento de código. La descripción del código es la misma que la que se compartió en las secciones anteriores, excepto que debe usar el objeto FileAttachmentAnnotation para cumplir con este requisito.

// Obtenga ClientID y ClientSecret desde https://dashboard.aspose.cloud/
String clientId = "a41d01ef-dfd5-4e02-ad29-bd85fe41e3e4";
String clientSecret = "d87269aade6a46cdc295b711e26809af";
				
// instancia createPdfApi
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// documento PDF de entrada
String name = "PdfWithTable.pdf";	        
			    
// Cargar el archivo desde el sistema local
File file = new File("/Users/nayyershahbaz/Downloads/" + name);
// Sube el archivo al almacenamiento en la nube
FilesUploadResult uploadResponse = pdfApi.uploadFile(name, file, null);
				
// Número de página del archivo de entrada donde se agregará la anotación.
int pageNumber = 1;

// región rectangular para la anotación
Rectangle rect = new Rectangle()
    .LLX(100.)
    .LLY(100.)
    .URX(200.)
    .URY(200.);

List<AnnotationFlags> flags = new ArrayList<>();
flags.add(AnnotationFlags.DEFAULT);

// crear objeto FileAttachmentAnnotation
FileAttachmentAnnotation annotation = new FileAttachmentAnnotation();
annotation.setName("Name");
annotation.setRect(rect);
annotation.setFlags(flags);
annotation.setHorizontalAlignment(HorizontalAlignment.CENTER);
annotation.contents("Rich Text in the PDF File...");
annotation.setSubject("Subj");
annotation.setZindex(1);
annotation.setTitle("Title");
annotation.setModified("28/05/2021 00:00:00.000 AM");
		        
// ruta del archivo adjunto
annotation.setFilePath("images.jpeg");
// nombre del archivo adjunto
annotation.setFileName("images.jpeg");

// crear una instancia de lista de FileAttachment
List<FileAttachmentAnnotation> annotations = new ArrayList<>();
annotations.add(annotation);
		        
// Llamar al método para agregar la anotación FileAttachment a la primera página del documento
AsposeResponse response = pdfApi.postPageFileAttachmentAnnotations(name, pageNumber, annotations, null, null);
assertEquals(200, (int)response.getCode());

Conclusión

En este artículo, analizamos los pasos y los detalles relacionados para agregar texto, polilíneas, líneas onduladas y anotaciones de archivos adjuntos al documento PDF. Dado que nuestros SDK de la nube son de código abierto, puede descargar el código fuente completo desde GitHub. El repositorio también contiene otros ejemplos útiles sobre cómo usar el SDK de Java Cloud para crear y manipular archivos PDF existentes. Si tiene alguna consulta relacionada, no dude en comunicarse con nosotros a través de los foros de soporte al cliente gratuitos.

Artículos relacionados

Le recomendamos visitar los siguientes artículos: