fix page count issue

This commit is contained in:
Reece 2025-09-26 17:48:41 +01:00
parent 1edd133e09
commit d8d6197008
2 changed files with 12 additions and 15 deletions

View File

@ -17,7 +17,7 @@ const Sign = (props: BaseToolProps) => {
const { setWorkbench } = useNavigation();
const { setSignatureConfig, activateDrawMode, activateSignaturePlacementMode, deactivateDrawMode, updateDrawSettings, undo, redo, signatureApiRef, getImageData, setSignaturesApplied } = useSignature();
const { consumeFiles, selectors } = useFileContext();
const { exportActions } = useViewer();
const { exportActions, getScrollState } = useViewer();
// Track which signature mode was active for reactivation after save
const activeModeRef = useRef<'draw' | 'placement' | null>(null);
@ -76,7 +76,8 @@ const Sign = (props: BaseToolProps) => {
exportActions,
selectors,
consumeFiles,
originalFile
originalFile,
getScrollState
});
if (success) {

View File

@ -19,10 +19,11 @@ interface SignatureFlatteningOptions {
selectors: MinimalFileContextSelectors;
consumeFiles: (inputFileIds: FileId[], outputStirlingFiles: StirlingFile[], outputStirlingFileStubs: StirlingFileStub[]) => Promise<FileId[]>;
originalFile?: StirlingFile;
getScrollState: () => { currentPage: number; totalPages: number };
}
export async function flattenSignatures(options: SignatureFlatteningOptions): Promise<boolean> {
const { signatureApiRef, getImageData, exportActions, selectors, consumeFiles, originalFile } = options;
const { signatureApiRef, getImageData, exportActions, selectors, consumeFiles, originalFile, getScrollState } = options;
try {
// Step 1: Extract all annotations from EmbedPDF before export
@ -31,12 +32,13 @@ export async function flattenSignatures(options: SignatureFlatteningOptions): Pr
if (signatureApiRef?.current) {
console.log('Extracting annotations from all pages...');
// Dynamically check all pages until we encounter consecutive errors
let pageIndex = 0;
let consecutiveErrors = 0;
const maxConsecutiveErrors = 3; // Stop after 3 consecutive page access failures
// Get actual page count from viewer
const scrollState = getScrollState();
const totalPages = scrollState.totalPages;
console.log(`Document has ${totalPages} pages`);
while (consecutiveErrors < maxConsecutiveErrors) {
// Check only actual pages that exist in the document
for (let pageIndex = 0; pageIndex < totalPages; pageIndex++) {
try {
const pageAnnotations = await signatureApiRef.current.getPageAnnotations(pageIndex);
if (pageAnnotations && pageAnnotations.length > 0) {
@ -66,15 +68,9 @@ export async function flattenSignatures(options: SignatureFlatteningOptions): Pr
console.log(`Found ${sessionAnnotations.length} session annotations on page ${pageIndex + 1} (out of ${pageAnnotations.length} total)`);
}
}
// Reset consecutive error count on successful page access
consecutiveErrors = 0;
} catch (pageError) {
consecutiveErrors++;
console.warn(`Error extracting annotations from page ${pageIndex + 1} (error ${consecutiveErrors}/${maxConsecutiveErrors}):`, pageError);
console.warn(`Error extracting annotations from page ${pageIndex + 1}:`, pageError);
}
pageIndex++;
}
}