diff --git a/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/_components/PdfViewer.tsx b/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/_components/PdfViewer.tsx index 3344c37..e2c09b7 100644 --- a/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/_components/PdfViewer.tsx +++ b/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/_components/PdfViewer.tsx @@ -3,6 +3,7 @@ import { useState } from 'react'; import { Document, Page, pdfjs } from 'react-pdf'; import 'react-pdf/dist/Page/AnnotationLayer.css'; import 'react-pdf/dist/Page/TextLayer.css'; +import { FieldPlacer } from './FieldPlacer'; // Worker setup — must use import.meta.url for local/Docker environments (no CDN) pdfjs.GlobalWorkerOptions.workerSrc = new URL( @@ -10,10 +11,19 @@ pdfjs.GlobalWorkerOptions.workerSrc = new URL( import.meta.url, ).toString(); +interface PageInfo { + originalWidth: number; + originalHeight: number; + width: number; + height: number; + scale: number; +} + export function PdfViewer({ docId }: { docId: string }) { const [numPages, setNumPages] = useState(0); const [pageNumber, setPageNumber] = useState(1); const [scale, setScale] = useState(1.0); + const [pageInfo, setPageInfo] = useState(null); return (
@@ -54,13 +64,29 @@ export function PdfViewer({ docId }: { docId: string }) {
- setNumPages(numPages)} - className="shadow-lg" - > - - + {/* PDF canvas wrapped in FieldPlacer for drag-and-drop field placement */} + + setNumPages(numPages)} + className="shadow-lg" + > + { + setPageInfo({ + // Math.max handles non-standard mediaBox ordering (view is [x1, y1, x2, y2]) + originalWidth: Math.max(page.view[0], page.view[2]), + originalHeight: Math.max(page.view[1], page.view[3]), + width: page.width, + height: page.height, + scale: page.scale, + }); + }} + /> + + ); }