Manipula contenido PDF con la nueva API de ONLYOFFICE PDF Editor

18 marzo 2026Por Dea

ONLYOFFICE ha introducido recientemente una nueva API para PDF, incorporando soporte para macros en este formato. Con estos nuevos métodos, puedes interactuar con documentos PDF de forma programática, automatizando tareas que normalmente requerirían trabajo manual. En esta publicación, exploraremos tres macros prácticas que demuestran lo que puedes hacer con la nueva API.

Manipula contenido PDF con la nueva API de ONLYOFFICE PDF Editor

Nuevos métodos de la API PDF

Aquí tienes un resumen de los nuevos métodos utilizados en los tres ejemplos de macros:

  • GetPagesCount() devuelve el número total de páginas del documento PDF.
  • GetPage(index) recupera un objeto de página específico según su índice, devolviendo un objeto ApiPage.
  • GetAllAnnots() devuelve un array con todas las anotaciones de una página.
  • GetContents() obtiene el contenido de texto de una anotación.
  • GetAllDrawings() devuelve un array con todos los objetos gráficos (formas, gráficos, imágenes).
  • SetPosition(x, y) posiciona un objeto gráfico directamente en la página usando coordenadas absolutas.
  • AddObject(object) añade un objeto gráfico (forma, gráfico, imagen) a una página específica.
  • Delete() elimina el objeto especificado del documento.

Estos métodos pertenecen a las clase ApiDocument, ApiPage, ApiBaseAnnotation y ApiDrawing. Se pueden combinar con los métodos existentes de la API de Office que ya conoces.

Ejemplo 1: Eliminar anotaciones por palabra clave

Nuestro primer macro encuentra y elimina todas las anotaciones que contienen una palabra clave específica. Veamos cómo funciona paso a paso.

Configuración de la palabra clave y el documento

const KEYWORD = "example";
const doc = Api.GetDocument();
const pagesCount = doc.GetPagesCount();
let deletedCount = 0;

Primero, definimos la palabra clave objetivo: cualquier anotación que incluya esta palabra será eliminada. Luego, obtenemos el documento actual y calculamos el número total de páginas utilizando GetPagesCount(). La variable deletedCount llevará la cuenta de cuántas anotaciones se eliminan.

for (let i = 0; i < pagesCount; i++) {
    const page = doc.GetPage(i);
    const annots = page.GetAllAnnots();

    if (!annots || annots.length === 0) continue;

Un bucle for recorre todas las páginas. Para cada una, utilizamos GetPage() para obtener el objeto ApiPageGetAllAnnots() para recuperar todas las anotaciones. Si una página no tiene anotaciones, se omite y se continúa con la siguiente.

Coincidencia y eliminación de anotaciones

for (let j = annots.length - 1; j >= 0; j--) {
    const annot = annots[j];
    const contents = (annot.GetContents() || "").toLowerCase();

Dentro de cada página, recorremos las anotaciones en orden inverso. Esto es importante porque eliminar elementos mientras se itera hacia adelante puede provocar cambios en los índices y saltarse elementos. Para cada anotación, obtenemos su texto con GetContents() y lo convertimos a minúsculas para una comparación sin distinción entre mayúsculas y minúsculas.

if (contents.includes(KEYWORD.toLowerCase())) {
    annot.Delete();
    deletedCount++;
}

Si el texto contiene la palabra clave, utilizamos Delete() para eliminar la anotación del documento y aumentamos el contador.

console.log("Deleted annotations containing keyword:", KEYWORD);

console.log("Total deleted:", deletedCount);

Al final, la macro registra en la consola la palabra clave buscada y el número total de anotaciones eliminadas.

El código completo de la macro:

(function () {
    const KEYWORD = "example";
    const doc = Api.GetDocument();
    const pagesCount = doc.GetPagesCount();
    let deletedCount = 0;

    for (let i = 0; i < pagesCount; i++) {
        const page = doc.GetPage(i);
        const annots = page.GetAllAnnots();

        if (!annots || annots.length === 0) continue;

        for (let j = annots.length - 1; j >= 0; j--) {
            const annot = annots[j];
            const contents = (annot.GetContents() || "").toLowerCase();

            if (contents.includes(KEYWORD.toLowerCase())) {
                annot.Delete();
                deletedCount++;
            }
        }
    }

    console.log("Deleted annotations containing keyword:", KEYWORD);
    console.log("Total deleted:", deletedCount);
})();

Una vez ejecutado el macro, todas las anotaciones que contienen la palabra clave especificada se eliminan del documento. Para buscar otra palabra, basta con cambiar la variable KEYWORD al inicio del código.

Manipula contenido PDF con la nueva API de ONLYOFFICE PDF Editor

Ejemplo 2: Eliminar todos los objetos gráficos

Este macro recorre cada página y elimina todos los objetos gráficos — o solo un tipo específico. Utiliza GetAllDrawings() para obtener todos los elementos visuales de cada página, y GetClassType() para comprobar su tipo antes de eliminarlos.

La variable targetType al inicio controla qué se elimina. Puedes establecerla como “toda” para borrar todo, o utilizar “forma”, “imagen” o “gráfico” para dirigirte a un tipo específico de objeto gráfico.

(function () {
    const doc = Api.GetDocument();
    const pagesCount = doc.GetPagesCount();
    let totalDeleted = 0;

    const targetType = "all";

    for (let i = 0; i < pagesCount; i++) {
        const page = doc.GetPage(i);
        const drawings = page.GetAllDrawings();

        for (let j = 0; j < drawings.length; j++) {
            if (targetType === "all" || drawings[j].GetClassType() === targetType) {
                drawings[j].Delete();
                totalDeleted++;
            }
        }
    }

    console.log("Deleted " + totalDeleted + " drawing(s) from " + pagesCount + " page(s).");
})();

Ya sea que estés preparando un documento para imprimir, eliminando diagramas desactualizados o quitando imágenes antes de redistribuirlo, este macro lo hace automáticamente. Ajustando la variable targetType variable, puedes alternar entre una limpieza completa o selectiva sin modificar ninguna otra parte del código.

Manipula contenido PDF con la nueva API de ONLYOFFICE PDF Editor

Ejemplo 3: Añadir una marca de agua a cada página

Nuestro último macro crea una forma personalizable como marca de agua y la coloca en cada página del documento. Usa SetPosition() para ubicar la manera en coordenadas exactas dentro de la página y AddObject() para añadirla a cada una. 

Todas las propiedades clave se definen como variables al inicio, lo que facilita modificar el texto de la marca de agua, los colores, el tamaño de fuente, la posición y el ángulo de rotación.

(function () {
    const doc = Api.GetDocument();
    const pagesCount = doc.GetPagesCount();

    const watermarkText = "DRAFT";
    const bgColor = Api.CreateRGBColor(200, 200, 200);
    const textColor = Api.CreateRGBColor(255, 255, 255);
    const fontSize = 72;
    const positionX = 1200000;
    const positionY = 4000000;
    const rotation = -45;

    for (let i = 0; i < pagesCount; i++) {
        const page = doc.GetPage(i);
        const fill = Api.CreateSolidFill(bgColor);
        const stroke = Api.CreateStroke(0, Api.CreateNoFill());
        const watermark = Api.CreateShape("rect", 160 * 36000, 20 * 36000, fill, stroke);
        watermark.SetPosition(positionX, positionY);
        watermark.SetRotation(rotation);

        const content = watermark.GetContent();
        const para = content.GetElement(0);
        para.SetJc("center");
        const run = para.AddText(watermarkText);
        run.SetFontSize(fontSize);
        run.SetBold(true);
        run.SetFill(Api.CreateSolidFill(textColor));

        page.AddObject(watermark);
    }
})();

La marca de agua se construye a partir de una manera estándar con contenido de texto, lo que te da control total sobre su apariencia: desde etiquetas sutiles en segundo plano hasta sellos grandes que cubren toda la página. También puedes experimentar con diferentes tamaños, estilos de fuente o ángulos de rotación para lograr el diseño que mejor se adapte a tus documentos.

Manipula contenido PDF con la nueva API de ONLYOFFICE PDF Editor

Estos tres macros son solo un punto de partida: la nueva API de PDF abre muchas más posibilidades para automatizar tus flujos de trabajo con documentos PDF. Puedes combinar estos métodos para crear macros más avanzados adaptados a tus necesidades específicas. Explora la documentación de la API y los ejemplos de macros para obtener más ideas. Si tienes preguntas o quieres compartir lo que has generado, ¡no dudes en ponerte en contacto!

Crea tu cuenta gratuita de ONLYOFFICE

Visualiza, edita y colabora en documentos, hojas, diapositivas, formularios y archivos PDF en línea.