career-ops

pdf

Genera un CV en PDF adaptado a una JD concreta: career-ops construye el CV como HTML a partir de una plantilla tipográfica limpia y Playwright lo imprime a PDF. El resultado es estructuralmente simple (sin tablas, sin columnas, sin gráficos), exactamente lo que los parsers ATS procesan de forma fiable.

Qué hace

El modo pdf lee tu cv.md maestro y el contexto de la JD, y ejecuta el paso de adaptación (reescribe bullets, reordena secciones, integra keywords prioritarias) antes de exportar a PDF vía Playwright con una plantilla CSS que respeta las convenciones de los parsers ATS. El resultado está listo para subir.

Cuándo usarlo

Usa pdf cuando ya has evaluado la oferta y has decidido aplicar, y solo quieres el PDF adaptado sin volver a ejecutar el paso de evaluación.

Cómo es una ejecución

Apuntas el modo a una oferta que ya has evaluado y produce un único PDF adaptado y listo para ATS — sin re-evaluación. Extrae 15-20 keywords de la JD, elige el tamaño de papel según la ubicación de la empresa, reescribe tu resumen y reordena los bullets en torno al puesto, y después renderiza el HTML a PDF e informa de la cobertura de keywords.

Terminal
/career-ops pdf acme

# detected JD language: en · paper: letter (US) · 18 keywords extracted
node generate-pdf.mjs output/cv-jane-doe-acme.html \
  output/cv-jane-doe-acme-2026-05-18.pdf --format=letter --report=008

PDF:   output/cv-jane-doe-acme-2026-05-18.pdf
Pages: 2 · Keyword coverage: 16/18 (89%)

El layout se mantiene a una sola columna, con cabeceras de sección estándar y texto seleccionable — la estructura que los parsers ATS leen sin problemas — y las keywords se entretejen en logros reales, nunca se inventan.

La cobertura de keywords se mide contra la sección de keywords del informe de evaluación de la oferta. Si el informe no tiene ninguna, career-ops puntúa en su lugar las habilidades que encuentra en la JD archivada en el informe y te indica qué fuente usó. Un informe sin sección de keywords es un defecto que hay que corregir en el informe, no algo que se dé por bueno.

Cuándo recurrir a él

Recurre a pdf cuando has decidido aplicar y solo quieres el CV adaptado, saltándote el paso de evaluación. Algunos comportamientos que conviene conocer:

  • El tamaño de papel sigue automáticamente la ubicación de la empresa: letter para puestos en EE. UU. y Canadá, a4 en el resto del mundo.
  • La inyección de keywords se basa en la verdad. El modo reformula experiencia real con el vocabulario exacto de la JD, pero nunca añade una habilidad que no tienes.
  • Para DACH y buena parte de la Europa continental puedes optar por incluir foto configurando candidate.photo en config/profile.yml; déjalo vacío y el CV se renderiza píxel a píxel idéntico pero sin ella, que es la opción por defecto más segura para EE. UU., Reino Unido y mercados ATS-first.

Posibles problemas

Requiere Playwright instalado en local. El script de build puede fallar en instalaciones Linux mínimas sin fuentes del sistema. Ejecuta npm run doctor para diagnosticar.

La generación del PDF se detiene si los puestos de tu experiencia laboral no van del más reciente al más antiguo, y el error cita las fechas del puesto que empieza después que el de encima. Vuelve a ponerlos en orden cronológico inverso y repite: un CV se adapta con el resumen y los bullets, no moviendo puestos. Si de verdad quieres otro orden, pasa --allow-nonchronological a generate-pdf.mjs y se genera con un aviso. Con --batch, solo falla el CV desordenado; el resto se genera igual.

generate-pdf.mjs registra cada PDF que escribe en data/pdf-index.tsv, y career-ops lee ese archivo para encontrar el CV de un informe. Cada fila lleva un kind con valor cv o cover, y un informe conserva una fila de cada tipo. Al regenerar un PDF solo se sustituye la fila de su propio tipo.

Sin --kind, el tipo sale del nombre del archivo de salida. Un nombre que empieza por cv- es un CV, y uno que empieza por cover- o termina en -cover es una carta de presentación. Cualquier otro nombre se registra como CV.

El modo cover registra sus cartas como cover, se llamen como se llamen. La regla del nombre solo importa cuando ejecutas generate-pdf.mjs tú mismo. Una carta generada como acme-letter.pdf con --report=008 sustituye la fila del CV del informe 008, y quien busque ese CV recibe la carta. Pasa --kind=cover cuando el nombre del archivo no diga qué es:

Terminal
node generate-pdf.mjs output/acme-letter.html output/acme-letter.pdf \
  --report=008 --kind=cover

--kind acepta cv o cover, y cualquier otro valor, incluido uno vacío, detiene la ejecución antes de generar nada. --batch lo rechaza; pon "kind" en la entrada correspondiente del archivo del lote. data/pdf-index.tsv es de generate-pdf.mjs, y su línea de cabecera indica que no se edita a mano.

Relacionado

En esta página