diff --git a/src/lib/pdf.ts b/src/lib/pdf.ts index 3bd5bb8..cb35da1 100644 --- a/src/lib/pdf.ts +++ b/src/lib/pdf.ts @@ -12,9 +12,10 @@ export async function pdfToImages(pdfBuffer: Buffer): Promise { const converter = fromBuffer(pdfBuffer, { density: 200, format: "jpeg", - width: 1600, + width: 2200, height: 2200, quality: 90, + preserveAspectRatio: true, }); const pageCount = await getPdfPageCount(pdfBuffer); @@ -23,12 +24,21 @@ export async function pdfToImages(pdfBuffer: Buffer): Promise { for (let i = 1; i <= pageCount; i++) { const result = await converter(i, { responseType: "buffer" }); if (result.buffer) { - const metadata = await sharp(result.buffer).metadata(); + let buf = result.buffer as Buffer; + let meta = await sharp(buf).metadata(); + + // Scanners often store landscape content with a PDF /Rotate flag that + // pdf2pic may not apply. Detect and rotate to portrait orientation. + if ((meta.width || 0) > (meta.height || 0)) { + buf = await sharp(buf).rotate(90).jpeg({ quality: 90 }).toBuffer(); + meta = await sharp(buf).metadata(); + } + images.push({ page: i, - buffer: result.buffer as Buffer, - width: metadata.width || 1600, - height: metadata.height || 2200, + buffer: buf, + width: meta.width || 1600, + height: meta.height || 2200, }); } }