Ejemplos
Entrada de archivo con barra de progreso
import { useConvertFile } from "@markpdf/react";
export function PdfUploader() {
const { convert, status, progress, markdown, error, reset } = useConvertFile();
return (
<div>
<input
type="file"
accept="application/pdf"
disabled={status === "uploading" || status === "converting"}
onChange={(e) => e.target.files?.[0] && convert(e.target.files[0], { mode: "fast" })}
/>
{(status === "uploading" || status === "converting") && (
<progress value={status === "uploading" ? progress : 100} max={100} />
)}
{error && <p role="alert">{error.message}</p>}
{markdown && (
<>
<pre>{markdown}</pre>
<button onClick={reset}>Convertir otro</button>
</>
)}
</div>
);
}
Arrastrar y soltar
import { useConvertFile } from "@markpdf/react";
import { useState } from "react";
export function Dropzone() {
const { convert, status, markdown } = useConvertFile();
const [dragging, setDragging] = useState(false);
return (
<div
onDragOver={(e) => { e.preventDefault(); setDragging(true); }}
onDragLeave={() => setDragging(false)}
onDrop={(e) => {
e.preventDefault();
setDragging(false);
const file = e.dataTransfer.files[0];
if (file) convert(file, { mode: "fast" });
}}
style={{ border: dragging ? "2px dashed #14b8a6" : "2px dashed #ccc", padding: 32 }}
>
{status === "idle" && "Suelta un PDF aquí"}
{status === "uploading" && "Subiendo…"}
{markdown && <pre>{markdown}</pre>}
</div>
);
}
Rango de páginas de un PDF grande
const { convert } = useConvertFile();
convert(file, { mode: "fast", pages: "1-20" });
Metadatos en lugar de solo Markdown
const { convert, json } = useConvertFile();
await convert(file, { responseFormat: "json" });
console.log(json?.engine, json?.tokenSavedEstimate, json?.timings.totalRequestMs);
Pipeline RAG: índice antes de la conversión
import { useMarkpdf } from "@markpdf/react";
function RagPreview({ url }: { url: string }) {
const client = useMarkpdf();
const run = async () => {
const spine = await client.pdfIndex(url);
const target = spine.sections.find((s) => s.text.includes("Conclusiones"));
if (!target) return;
const markdown = await client.convertFromUrl(url, {
pages: `${target.page}-${spine.pageCount}`,
mode: "fast",
});
console.log(markdown);
};
return <button onClick={run}>Index and convert section</button>;
}
Estos ejemplos llaman a API directamente desde el navegador; la clave API está visible en el paquete. Revise la Guía marco antes de utilizar este patrón en producción pública.
