> ## Documentation Index
> Fetch the complete documentation index at: https://docs.doconda.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ¿Cómo extraer el texto de un PDF escaneado para un LLM?

> Llama a extract con el PDF: devuelve Markdown con títulos, tablas y marcas de página, y lee con OCR las páginas escaneadas.

Para extraer el texto de un PDF (también escaneado) y dárselo a un LLM, llama a `extract` con el fichero. Doconda
devuelve Markdown con títulos, tablas y columnas en su orden y marcas de página, y lee con OCR las páginas escaneadas
y sus tablas.

## Pasos

1. Guarda tu API key en `DOCONDA_API_KEY` e instala el SDK (`pip install doconda` o `npm install @doconda/sdk`).
2. Llama a `extract` con una ruta, una URL pública, bytes o un id `file_…`/`doc_…`.
3. Pasa el `markdown` a tu modelo.

<CodeGroup>
  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  from doconda import Doconda

  doconda = Doconda()  # lee la key de DOCONDA_API_KEY
  texto = doconda.extract("propuesta.pdf")["markdown"]
  print(texto[:500])
  ```

  ```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  import { Doconda } from "@doconda/sdk"

  const doconda = new Doconda()
  const { markdown } = await doconda.extract("propuesta.pdf")
  console.log(markdown.slice(0, 500))
  ```

  ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  curl https://api.eu.doconda.com/v1/extract \
    -H "Authorization: Bearer $DOCONDA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "file": { "url": "https://ejemplo.com/contrato.pdf" } }'
  ```
</CodeGroup>

## Qué devuelve

```json theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
{
  "object": "extraction",
  "id": "doc_01JAB3…",
  "format": "pdf",
  "markdown": "<!-- página 1 -->\n\nCONTRATO DE ARRENDAMIENTO…",
  "chars": 18342,
  "truncated": false,
  "pages": 7
}
```

* `markdown`: el texto con su estructura. En PDF, títulos, tablas y columnas en su orden, con marcas de página.
* `chars`, `pages` y `truncated` (si pasa de 2 000 000 de caracteres).

## Límites

* Hasta 100 páginas escaneadas por PDF; las siguientes salen marcadas como «sin leer». Un PDF puede tener hasta
  1 000 páginas.
* Un PDF largo y escaneado puede tardar unos minutos: pasados 120 s la API responde `202` con `{ "id", "status" }` y
  lo recoges con `GET /extract/{id}`. El SDK espera por ti.
* Ficheros de hasta 20 MB. Las URL solo pueden apuntar a direcciones públicas.

## Preguntas frecuentes

<AccordionGroup>
  <Accordion title="¿Qué otros formatos lee?">
    Word, PowerPoint, Excel (también `.doc`, `.ppt` y `.xls`), imágenes (PNG, JPG, GIF, WebP), TXT y Markdown. En
    PowerPoint, una sección por diapositiva con sus notas; en Excel, una tabla por hoja.
  </Accordion>

  <Accordion title="¿Doconda guarda el PDF?">
    No. Es una lectura, no un documento: no se guarda una vez te ha dado el texto, y si no lo recoges se borra a los
    15 minutos. El fichero enviado por URL, base64 o `multipart` también se borra a los 15 minutos.
  </Accordion>

  <Accordion title="¿Cuánto cuesta?">
    Mira la tabla de [precios](/guides/account#precios). Cuenta para el límite de 120 documentos por minuto.
  </Accordion>

  <Accordion title="¿Y si quiero que el PDF sea buscable?">
    Revísalo con `operation: "review"`: añade una capa de texto invisible (OCR) a las páginas escaneadas. Ver
    [Revisar](/guides/review).
  </Accordion>
</AccordionGroup>

## Sigue leyendo

* [Leer ficheros](/guides/extract).
* [Quickstart](/quickstart).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.