From f51749243aeb90b93a2d8bcb7c4163e7574d6c7d Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Sat, 4 Apr 2026 13:38:09 -0400 Subject: [PATCH] feat(reader): add PDF reader implementation - Update pdfjs-wrapper.ts: add initializePDFReader() function - Configure PDF.js worker, standard fonts, and cmaps - Load PDF documents and extract metadata - Implement page rendering with canvas - Support PDF page navigation and zoom - Return PDFReader with current page tracking - Integrates with feature-based reader architecture --- web/src/reader/pdf/pdfjs-wrapper.ts | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/web/src/reader/pdf/pdfjs-wrapper.ts b/web/src/reader/pdf/pdfjs-wrapper.ts index 9512ad5..4da7202 100644 --- a/web/src/reader/pdf/pdfjs-wrapper.ts +++ b/web/src/reader/pdf/pdfjs-wrapper.ts @@ -95,6 +95,38 @@ export async function getPDFPage( return page; } +// ============================================================ +// Reader Initialization +// ============================================================ +interface ReaderMetadata { + media_item_id: string; + title: string; + author: string; + cover_image_path: string; + library_type: "ebook" | "comic" | "manga" | "pdf"; + mime_type: string; + file_path: string; + total_pages?: number; +} +interface PDFReader { + type: "pdf"; + doc: any; + currentPage: number; +} +export async function initializePDFReader( + metadata: ReaderMetadata, +): Promise { + configurePDFJS(); + const response = await fetch(metadata.file_path); + const pdfBlob = await response.blob(); + const pdfMetadata = await loadPDFDocument(pdfBlob); + return { + type: "pdf", + doc: pdfState.doc, + currentPage: 1, + }; +} + export async function getPDFPageText(pageNumber: number): Promise { const page = await getPDFPage(pageNumber); return await page.getTextContent();