Ir al contenido principal
PPDF123

pdfx: la línea de comandos de PDF123

pdfx es la línea de comandos de PDF123, publicada en npm como @pdf123/cli. Ejecuta cualquiera de las 95 herramientas PDF, como unir, dividir, comprimir y OCR, sobre los archivos de tu disco: los envía a la API de PDF123 o a tu propio servidor y guarda el resultado en local.

@pdf123/cliNode 20.3 o superior, o Bun

Instalación

npm install -g @pdf123/cli
En esta página

¿Cómo instalo pdfx?

Instala el paquete de forma global para obtener el comando pdfx. También puedes ejecutarlo una vez sin instalarlo.

Installbash
npm install -g @pdf123/cli
pdfx --version
Run without installingbash
npx @pdf123/cli merge a.pdf b.pdf -o merged.pdf
bunx @pdf123/cli merge a.pdf b.pdf -o merged.pdf

bun add -g @pdf123/cli y pnpm add -g @pdf123/cli también funcionan. No hace falta instalar nada más.

¿Cómo empiezo?

Estos seis comandos muestran los patrones habituales.

Quick startbash
pdfx list                                          # every tool; --category security for one category
pdfx describe watermark                            # a tool's fields and defaults
pdfx merge a.pdf b.pdf -o merged.pdf
pdfx compress *.pdf -o compressed/                 # several files: one result per file
pdfx watermark in.pdf --watermarkText DRAFT
pdfx pipeline a.pdf b.pdf --step merge --step compress -o out.pdf

¿Cómo ejecuto cualquier herramienta?

El primer argumento es el id de la herramienta. Después van los archivos de entrada y las opciones de la herramienta. Cada opción de una herramienta es un indicador (flag), escrito con el nombre del campo de la API (--pageNumbers) o en kebab case (--page-numbers). Un número negativo puede ir tras su flag separado por un espacio, como en --rotation -90, o tras un signo igual.

Syntaxtext
pdfx <tool> [files...] [--<field> <value>]...

Usa pdfx list para ver las herramientas. Acepta --category o --group, y --query con palabras para buscar. Usa pdfx describe <tool> para ver el endpoint, las entradas aceptadas, si la herramienta se ejecuta como lote y cada campo con su valor por defecto y sus valores permitidos. Un id de herramienta desconocido recibe sugerencias, y uno mal escrito termina con el código 2.

¿Qué comandos corresponden a cada página de herramienta?

ComandoPágina de la herramientaQué hace
pdfx merge a.pdf b.pdf -o merged.pdfUnirUne varios PDF en uno
pdfx split report.pdf --pageNumbers 3,7 -o parts.zipDividirSepara un PDF en varios archivos
pdfx compress in.pdf -o out/ComprimirRecomprime los flujos del PDF para reducir su tamaño
pdfx watermark in.pdf --watermarkText DRAFTMarca de aguaAñade una marca de agua de texto o de imagen
pdfx protect in.pdf --password secret -o locked.pdfProtegerCifra un PDF con una contraseña
pdfx unlock locked.pdf --password secretDesbloquearQuita la protección con contraseña
pdfx get-info in.pdfInformación del documentoImprime en JSON los metadatos, los permisos y la estructura
pdfx ocr scan.pdf -o out/OCRLee un PDF escaneado y guarda Markdown
pdfx pdf-to-markdown in.pdf -o out/PDF a MarkdownConvierte un PDF en Markdown
pdfx rotate in.pdf --angle 90RotarCambia la orientación de las páginas 90, 180 o 270 grados
pdfx repair broken.pdfRepararReconstruye la estructura de un PDF dañado

¿Cómo proceso muchos archivos a la vez?

Si das varios archivos a una herramienta de un solo archivo, pdfx ejecuta un lote. Usa -o con un directorio que termine en barra. La herramienta se ejecuta una vez por archivo, de dos en dos por defecto. Cámbialo con --concurrency.

Batchbash
pdfx compress *.pdf -o compressed/
pdfx protect *.pdf --password secret --concurrency 4 -o locked/

pdfx imprime una línea, input -> saved, a medida que termina cada archivo. Un archivo que falla se notifica por la salida de error estándar y los demás se terminan igualmente. Pulsa Ctrl-C una vez para abortar la solicitud en curso; los archivos ya guardados se conservan. Un segundo Ctrl-C sale de inmediato con el código 130. Con --idempotency-key k, cada archivo envía k:<index>, y repetir la misma solicitud reproduce el primer resultado durante 24 horas.

Un lote de una herramienta que devuelve un informe, como get-info, no escribe archivos sin -o. Imprime los informes indexados por archivo de entrada.

¿Cómo encadeno herramientas en una sola solicitud?

pdfx pipeline ejecuta varias herramientas en una sola solicitud. Repite --step para cada herramienta. Para definir opciones, pasa un array JSON con --steps.

Pipelinesbash
pdfx pipeline a.pdf b.pdf --step merge --step compress -o out.pdf
pdfx pipeline in.pdf --steps '[{"tool":"watermark","params":{"watermarkText":"DRAFT"}},{"tool":"compress"}]' -o out.pdf

Los pasos no pueden usar herramientas que necesiten un segundo archivo.

¿Cómo abro PDF protegidos con contraseña?

--input-password abre primero todas las entradas cifradas. --password-for <file>=<password> define la contraseña de un archivo concreto. Se puede repetir, y * como nombre de archivo cubre el resto. Es útil para un lote que mezcla archivos bloqueados y abiertos. Con merge y images-to-pdf, cada archivo nombrado se desbloquea por separado antes de ejecutar la herramienta.

Passwordsbash
pdfx compress locked.pdf --input-password secret -o out.pdf
pdfx compress report.pdf --password-for report.pdf=secret -o out.pdf
pdfx merge a.pdf b.pdf --password-for a.pdf=secret -o merged.pdf

Las mismas opciones funcionan en un pipeline. Para quitar la protección de forma permanente, usa la herramienta Desbloquear con su propia opción --password.

¿Cómo funcionan la entrada y la salida?

  • Una entrada - lee la entrada estándar, una vez por ejecución. -o - escribe el resultado en la salida estándar.
  • -o file.pdf escribe ese archivo. -o dir/ escribe dentro de un directorio. Un directorio que aún no existe necesita la barra final, porque un nombre sin ella se escribe como archivo.
  • Sin -o, los resultados van al directorio actual con el nombre de archivo que da el servidor.
  • Dentro de un directorio, pdfx nunca reemplaza un archivo existente; elige un nombre nuevo. Un -o file.pdf explícito sí reemplaza ese archivo.
  • Un nombre de archivo de -o cuya extensión contradice el resultado, como un ZIP de split guardado como .pdf, se rechaza con el código de salida 2 y code: output_mismatch. No se escribe nada.
  • Una salida que no se puede escribir es un error de uso detectado antes de subir nada.
Shell pipebash
cat in.pdf | pdfx compress - -o - > out.pdf

¿Qué imprime --json?

Para un resultado guardado, --json imprime la ruta, el tipo de contenido y el tamaño. Una herramienta que devuelve un informe imprime el informe en sí. Un lote imprime un único informe con un estado por archivo.

Single resultjson
{ "path": "one.pdf", "contentType": "application/pdf", "bytes": 1040 }
Batch reportjson
{
  "processed": 2,
  "unmatched": 0,
  "failed": 0,
  "files": [
    { "input": "/abs/a.pdf", "ok": true, "path": "comp/a.pdf", "contentType": "application/pdf", "bytes": 1040 }
  ]
}

Un archivo fallido tiene error y reason en lugar de path y bytes. Una herramienta de filtro sin coincidencia imprime { "matched": false }. pdfx list --json imprime filas con id, category, group, name, description, returns, files y filter.

¿Qué opciones se aplican a todas las herramientas?

OpciónEfecto
-o, --output <path>Archivo que escribir, o directorio donde escribir. Por defecto, el directorio actual. - es la salida estándar
--api-base <url>Origen de la API. Variable de entorno PDFX_API_BASE, por defecto https://pdf123.xyz
--api-key <key>Se envía como X-API-KEY. Variable de entorno PDFX_API_KEY. Opcional
--input-password <pw>Abre primero todas las entradas protegidas con contraseña
--password-for <file>=<pw>Contraseña de un archivo. Repetible
--concurrency <n>Archivos de un lote procesados a la vez. Por defecto 2
--timeout <ms>Tiempo límite de cada solicitud. Por defecto 300000
--idempotency-key <k>Reproduce el primer resultado durante 24 horas
--jsonSalida legible por máquinas

¿Cuáles son los códigos de salida?

CódigoSignificado
0Éxito. Una herramienta de filtro sin coincidencia también termina con 0 e imprime no match
1Una solicitud falló. En un lote, falló al menos un archivo; los demás se terminan igualmente
2Error de uso. No se subió nada
130Interrumpido con Ctrl-C. La solicitud en curso se aborta

Los fallos imprimen líneas reason:, code: y hint: cuando el servidor las proporciona, de modo que un script puede ramificar sin comparar texto. Una herramienta que no encuentra nada que devolver, como pdf-to-csv con un PDF sin tablas, termina con 1 y code: no_content en lugar de escribir un archivo vacío. Los códigos figuran en Códigos de error.

¿Cómo apunto pdfx a mi propio servidor?

Define PDFX_API_BASE, o pasa --api-base, con la dirección de un pdfx-server autohospedado. Añade PDFX_API_KEY si tu servidor exige una clave. Consulta Autohospedaje.

Self-hosted serverbash
export PDFX_API_BASE=http://localhost:8080
export PDFX_API_KEY=<your-key>
pdfx compress in.pdf

¿Cómo ejecuto un endpoint que la CLI no conoce?

pdfx call envía una solicitud sin procesar a un id de operación o a una ruta /api/.... Usa --field name=value para los campos del formulario y --file field=path para archivos adicionales. Envía exactamente una solicitud y no valida nada en local, por lo que rechaza las contraseñas y los lotes.

Raw requestsbash
pdfx call general/merge-pdfs a.pdf b.pdf -o merged.pdf
pdfx call /api/v1/misc/flatten in.pdf --field flattenOnlyForms=true -o flat.pdf

Preguntas frecuentes

¿pdfx funciona sin conexión?

No. pdfx sube cada archivo a la API de PDF123 o a tu propio servidor y guarda el resultado en local, así que la base de la API debe ser accesible.

¿pdfx necesita una clave de API?

No. Funciona de forma anónima. Define PDFX_API_KEY o pasa --api-key si tu servidor exige una. La clave se envía en la cabecera X-API-KEY.

¿Qué versión de Node necesita pdfx?

Node 20.3 o superior, o Bun.

¿pdfx sobrescribirá mis archivos?

No cuando escribe dentro de un directorio: un archivo existente nunca se reemplaza. Si nombras tú el archivo de salida con -o file.pdf, ese archivo sí se reemplaza, así que elige un nombre nuevo si quieres conservar el original.

¿Qué pasa cuando una herramienta de filtro no encuentra coincidencia?

Las herramientas de filtro, cuyos ids empiezan por filter-, dejan pasar el archivo cuando se cumple su condición. Cuando no se cumple, pdfx imprime no match y termina con el código 0. En un lote, ese archivo cuenta como sin coincidencia, no como fallido.