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

# Archivos PDF

> Usa el contenido de PDF para resúmenes, respuesta de preguntas, extracción de campos, limpieza de tablas y salida estructurada.

Los flujos de trabajo con PDF son útiles para contratos, artículos, manuales, informes financieros, guías de producto y documentos comerciales exportados. Extrae el contenido del PDF, pasa el contexto relevante a un modelo y luego solicita resúmenes, respuestas o campos estructurados.

## Patrones de procesamiento

<Columns cols={2}>
  <Card title="Documentos cortos" icon="file">
    Extrae el texto y pásalo directamente como contexto cuando el documento sea corto y esté bien estructurado.
  </Card>

  <Card title="Documentos largos" icon="files">
    Divide por sección, página o fragmento de contenido para que la información sea más fácil de ubicar y referenciar en una conversación.
  </Card>
</Columns>

## Flujo de trabajo sugerido

<Steps>
  <Step title="Extrae el texto y las referencias de página">
    Conserva los encabezados, los números de página y el contexto de las tablas para que las respuestas puedan citar su fuente.
  </Step>

  <Step title="Divide los documentos largos en fragmentos">
    Divide los PDF grandes por tema o rango de páginas para evitar enviar contexto no relacionado.
  </Step>

  <Step title="Elige un formato de salida">
    Usa prosa para resúmenes, JSON para extracción y tablas Markdown para limpieza de tablas.
  </Step>
</Steps>

<Warning>
  Antes de subir contratos, registros financieros, archivos de recursos humanos o datos de clientes, confirma tu política de datos y usa claves de API aisladas con restricciones de cuota y de modelo.
</Warning>

## Ejemplo de API

Para las llamadas a la API, un enfoque común es extraer primero el texto del PDF en tu backend y luego incluir el contenido relevante en `messages.content`. Los ejemplos a continuación leen `contract.pdf`, lo resumen y extraen campos clave.

Coloca el PDF en la raíz del proyecto: la carpeta que contiene el archivo `.py` o `.mjs` y desde donde ejecutas el comando. `PDF_PATH = "contract.pdf"` es el nombre de archivo que se debe leer. Si tu archivo se llama `invoice.pdf`, cámbialo a `PDF_PATH = "invoice.pdf"`. El nombre, la extensión y las mayúsculas/minúsculas deben coincidir exactamente con el archivo. Usa la ruta local completa cuando el archivo esté fuera de la raíz del proyecto. No subes el PDF por separado: el código lee el archivo y envía su texto extraído en la solicitud.

`PdfReader` no viene incorporado en Python. Se importa desde el paquete `pypdf`. En el ejemplo de Node.js, `PDFParse` se importa desde `pdf-parse`. Python y Node.js usan gestores de paquetes diferentes: ejecuta el siguiente comando en la carpeta de tu proyecto para Python; para Node.js, elige `npm` o `pnpm`.

<CodeGroup>
  ```bash macOS / Linux theme={null}
  python3 -m pip install openai pypdf
  ```

  ```powershell Windows theme={null}
  py -m pip install openai pypdf
  ```
</CodeGroup>

<CodeGroup>
  ```bash npm theme={null}
  npm install openai pdf-parse
  ```

  ```bash pnpm theme={null}
  pnpm add openai pdf-parse
  ```
</CodeGroup>

<CodeGroup>
  ```python Python theme={null}
  from openai import OpenAI

  # PdfReader comes from pypdf. It opens the PDF and lets you read page text.
  from pypdf import PdfReader

  client = OpenAI(
      api_key="sk-your-key",
      base_url="https://moxus.ai/v1",
  )

  # Put contract.pdf in the project root. Replace it with your actual filename.
  PDF_PATH = "contract.pdf"
  reader = PdfReader(PDF_PATH)

  # page.extract_text() extracts text from one page. Empty pages fall back to an empty string.
  pdf_text = "\n\n".join(page.extract_text() or "" for page in reader.pages)

  response = client.chat.completions.create(
      model="gpt-5.4-mini",
      messages=[
          {
              "role": "user",
              "content": f"Summarize this PDF and extract the parties, amount, dates, and risk points:\n\nPDF file: {PDF_PATH}\n\n{pdf_text}",
          }
      ],
  )

  print(response.choices[0].message.content)
  ```

  ```javascript Node.js theme={null}
  import OpenAI from "openai";
  import { readFile } from "node:fs/promises";

  // PDFParse converts a PDF buffer into extracted text.
  import { PDFParse } from "pdf-parse";

  const client = new OpenAI({
    apiKey: "sk-your-key",
    baseURL: "https://moxus.ai/v1",
  });

  // Put contract.pdf in the project root. Replace it with your actual filename.
  const PDF_PATH = "contract.pdf";
  // readFile reads the local PDF. getText() returns the extracted text.
  const parser = new PDFParse({ data: await readFile(PDF_PATH) });
  const { text: pdfText } = await parser.getText();
  await parser.destroy();

  const response = await client.chat.completions.create({
    model: "gpt-5.4-mini",
    messages: [
      {
        role: "user",
        content: `Summarize this PDF and extract the parties, amount, dates, and risk points:\n\nPDF file: ${PDF_PATH}\n\n${pdfText}`,
      },
    ],
  });

  console.log(response.choices[0].message.content);
  ```
</CodeGroup>

<Note>
  El ejemplo de Python requiere `openai` y `pypdf`. Si `py` no está disponible en Windows, usa `python -m pip install openai pypdf`. El ejemplo de Node.js requiere `openai` y `pdf-parse` instalados mediante `npm` o `pnpm`. Si el PDF es un documento escaneado, ejecuta OCR antes de enviar el texto extraído.
</Note>

## Próximos pasos

* [Salida estructurada](/es/guide/structured-output)
