Miré el sitio web de pdf-lib y no veo ningún ejemplo para cargar un PDF usando un "archivo de entrada" en el lado del cliente. Todos los ejemplos apuntan a una URL para cargar un PDF. ¿Es posible pasar un objeto de archivo a la función que lee el PDF en lugar de una URL?
const formPDFBytes = await fetch(url).then(res => res.arrayBuffer()) const pdfDoc= await PDFDocument.load(formPDFBytes );Creo que si de alguna manera podemos configurar el objeto de archivo como un búfer de matriz para formar PDFBytes, eso puede ser el truco.
[De los comentarios OP]
El usuario es quien tiene el PDF y lo carga a través del cuadro de diálogo del archivo de entrada DOM. Por lo tanto, aquí no se enviará nada al servidor y el cliente realizará toda la operación de análisis de PDF.
Según el código de pdf-lib , la función PDFDocument.load acepta en el primer argumento una string | Uint8Array | ArrayBuffer .
Si desea leer un archivo localmente, puede hacer esto:
import fs from 'fs' const uint8Array = fs.readFileSync('/path/to/myFile.pdf') const pdfDoc3 = await PDFDocument.load(uint8Array)si desea cargar el archivo desde el elemento <input type="file" /> , primero debe leer el archivo como ArrayBuffer.
<input type="file" id="file"> // const file = document.getElementById('file').files[0] const reader = new FileReader(); reader.readAsArrayBuffer(file); reader.onload = () => { const pdfDoc = await PDFDocument.load(reader.result); //... };