# Seleccionar páginas

Cómo indicar las páginas sobre las que actúa una acción: los campos pages, page_order y groups, y la sintaxis de rangos que comparten.

Muchas acciones operan sobre un subconjunto de las páginas de un documento.
Ese subconjunto se describe con una sintaxis de rangos compacta: números de
página en base 1 y rangos separados por comas, como `1..3,5`. Los mismos
números y rangos aparecen en todas las acciones, pero se leen con uno de dos
significados: como **conjunto** o como **lista ordenada**. Esta página es la
referencia única de ambos; todas las acciones con un campo de páginas enlazan
aquí.

## Dos tipos de selección

- Un campo de **conjunto** (`pages`) responde a *qué* páginas. El orden y los
  duplicados se ignoran, y las páginas seleccionadas siempre se procesan en
  el orden del documento.
- Un campo **ordenado** (`page_order`, y cada grupo de `groups`) responde a
  *en qué secuencia*. El orden y las repeticiones importan: las páginas salen
  exactamente como se escribieron.

La sintaxis para expresar un rango es idéntica en ambos. La diferencia está
solo en cómo se interpreta el resultado.

## Selección por conjunto: el campo `pages`

Un campo `pages` es una lista separada por comas de números de página en base
1 y de rangos:

- Una sola página, como `5`.
- Un rango, como `2..6` (las páginas 2 a 6).
- Un rango abierto: `8..` es de la página 8 a la última, y `..5` es de la
  primera página a la página 5.
- Un índice negativo cuenta desde el final: `-1` es la última página y `-2`
  la penúltima. Los rangos también los aceptan, así que `-3..-1` son las
  últimas tres páginas.

Un campo `pages` se trata como un **conjunto**: el orden y los duplicados se
ignoran, y las páginas siempre se procesan en el orden del documento. Dejarlo
vacío selecciona todas las páginas.

| Patrón     | Selecciona                                 |
| ---------- | ------------------------------------------ |
| *(omitir)* | Todas las páginas                          |
| `1`        | Solo la primera página                     |
| `2..6`     | Las páginas 2 a 6                          |
| `1..3,5`   | Las páginas 1, 2, 3 y 5                    |
| `8..`      | De la página 8 a la última                 |
| `..5`      | De la primera página a la página 5         |
| `..-2`     | De la primera página a la penúltima        |
| `-1`       | La última página                           |
| `-3..-1`   | Las últimas tres páginas                   |

Como un conjunto no tiene orden, `5,1,2..3` y `1,2,3,5` seleccionan
exactamente las mismas páginas, y ambas se aplican en el orden del documento.
Algunas acciones añaden una regla propia: por ejemplo, [Quitar
páginas](/docs/api/remove-pages-from-pdf) debe dejar al menos una página, así
que se rechaza una selección que quitaría todas.

## Selección ordenada: `page_order` y `groups`

Algunas entradas son una lista **ordenada** en lugar de un conjunto. Usan los
mismos números y rangos que arriba, pero aquí el orden y los duplicados
importan: las páginas salen exactamente como se listaron, una página nombrada
dos veces se emite dos veces y cualquier página omitida se descarta. Un rango
también puede ir hacia atrás, así que `10..5` recorre de la página 10 a la
página 5.

- [`page_order`](/docs/api/reorder-pages-of-pdf) (usado por reordenar) es una
  sola lista ordenada. `3,1,2` pone primero la página 3, después la 1 y
  después la 2. Como las páginas omitidas se descartan y las repeticiones se
  conservan, reordenar sirve además como extraer, duplicar y reordenar en una
  sola operación.
- [`groups`](/docs/api/split-pdf-into-page-groups) (usado por dividir en
  grupos de páginas) son varias listas ordenadas separadas por `;`. Cada grupo se
  convierte en un PDF de salida, y dentro de un grupo se aplican las reglas
  de orden. `2..8,29;1` produce dos documentos: el primero con las páginas 2
  a 8 y luego la 29, el segundo con la página 1.

## Qué campo usa cada acción

| Campo        | Semántica           | Acciones                                                                                                                                                                                                                                                                                             |
| ------------ | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `pages`      | Conjunto            | [Añadir marca de agua de texto](/docs/api/add-text-watermark-to-pdf), [Añadir marca de agua de imagen](/docs/api/add-image-watermark-to-pdf), [Extraer páginas](/docs/api/extract-pages-from-pdf), [Quitar páginas](/docs/api/remove-pages-from-pdf), [Girar páginas](/docs/api/rotate-pages-in-pdf) |
| `page_order` | Ordenado            | [Reordenar páginas](/docs/api/reorder-pages-of-pdf)                                                                                                                                                                                                                                                  |
| `groups`     | Ordenado, por grupo | [Dividir en grupos de páginas](/docs/api/split-pdf-into-page-groups)                                                                                                                                                                                                                                 |

<Tip>
  Use un campo de conjunto cuando el resultado sea el mismo sin importar la
  secuencia que escriba, como estampar una marca de agua en las páginas 2, 4
  y 6. Use un campo ordenado cuando la secuencia *sea* el resultado, como
  reorganizar o repetir páginas.
</Tip>

## Reglas que se aplican en todos los casos

- Los números de página están en **base 1**. No existe la página `0`.
- Los índices negativos y los rangos abiertos funcionan tanto en campos de
  conjunto como ordenados.
- Una selección que hace referencia a una página que no existe en el
  documento, como `12` en un archivo de diez páginas, se rechaza con un
  `400`. Consulte [Errores](/docs/api/errors).
