@koi-br/ocr-web-sdk 1.0.32 → 1.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{index-D7aLbyEQ.js → index-DK33Dz9M.js} +90 -90
- package/dist/{index-Bf47RAC6.mjs → index-DXnzd_-3.mjs} +9448 -9416
- package/dist/index.cjs.js +2 -2
- package/dist/index.esm.js +2 -2
- package/dist/{tiff.min-TbRkKSGf.js → tiff.min-Bbzmyg2R.js} +1 -1
- package/dist/{tiff.min-CehJk-e3.mjs → tiff.min-x7pMh_Bz.mjs} +1 -1
- package/package.json +1 -1
- package/preview/ImagePreview.vue +86 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { g as getAugmentedNamespace, a as getDefaultExportFromCjs } from "./index-
|
|
1
|
+
import { g as getAugmentedNamespace, a as getDefaultExportFromCjs } from "./index-DXnzd_-3.mjs";
|
|
2
2
|
function _mergeNamespaces(U, W) {
|
|
3
3
|
for (var Z = 0; Z < W.length; Z++) {
|
|
4
4
|
const s0 = W[Z];
|
package/package.json
CHANGED
package/preview/ImagePreview.vue
CHANGED
|
@@ -123,6 +123,7 @@
|
|
|
123
123
|
:key="pageIndex"
|
|
124
124
|
:data-page-number="pageIndex + 1"
|
|
125
125
|
class="image-page-container"
|
|
126
|
+
:style="getPageContainerStyle(pageIndex + 1)"
|
|
126
127
|
>
|
|
127
128
|
<div
|
|
128
129
|
class="image-wrapper"
|
|
@@ -395,6 +396,10 @@ const isUserZooming = ref(false); // 标记用户是否主动缩放
|
|
|
395
396
|
let scrollPagingTimer: any = null;
|
|
396
397
|
const isScrollPaging = ref(false); // 标记是否正在进行滚动翻页
|
|
397
398
|
|
|
399
|
+
// ResizeObserver 相关
|
|
400
|
+
let resizeObserver: ResizeObserver | null = null;
|
|
401
|
+
let resizeTimer: any = null; // 防抖定时器
|
|
402
|
+
|
|
398
403
|
// 图片和容器引用
|
|
399
404
|
const containerRef = ref<HTMLElement>();
|
|
400
405
|
const imageRefs = new Map<number, HTMLImageElement>();
|
|
@@ -514,6 +519,35 @@ const getPageBlocksData = (pageNo: number) => {
|
|
|
514
519
|
return props.blocksData.filter((block) => block.pageNo === pageNo);
|
|
515
520
|
};
|
|
516
521
|
|
|
522
|
+
// 计算指定页面缩放后的尺寸(考虑旋转)
|
|
523
|
+
const getPageScaledSize = (pageNo: number) => {
|
|
524
|
+
const pageSize = imageSizes.get(pageNo);
|
|
525
|
+
if (!pageSize || pageSize.width === 0 || pageSize.height === 0) {
|
|
526
|
+
return { width: 0, height: 0 };
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
const { width, height } = pageSize;
|
|
530
|
+
const scaledWidth = width * scale.value;
|
|
531
|
+
const scaledHeight = height * scale.value;
|
|
532
|
+
|
|
533
|
+
// 如果旋转了 90 度或 270 度,交换宽高
|
|
534
|
+
const normalizedRotation = ((rotation.value % 360) + 360) % 360;
|
|
535
|
+
const isRotated = normalizedRotation === 90 || normalizedRotation === 270;
|
|
536
|
+
|
|
537
|
+
return {
|
|
538
|
+
width: isRotated ? scaledHeight : scaledWidth,
|
|
539
|
+
height: isRotated ? scaledWidth : scaledHeight,
|
|
540
|
+
};
|
|
541
|
+
};
|
|
542
|
+
|
|
543
|
+
// 获取页面容器的样式(响应式,会根据缩放和旋转自动更新)
|
|
544
|
+
const getPageContainerStyle = (pageNo: number) => {
|
|
545
|
+
const scaledSize = getPageScaledSize(pageNo);
|
|
546
|
+
return {
|
|
547
|
+
height: scaledSize.height > 0 ? `${scaledSize.height}px` : 'auto',
|
|
548
|
+
};
|
|
549
|
+
};
|
|
550
|
+
|
|
517
551
|
// 隐藏定时器
|
|
518
552
|
let hideTimer: any = null;
|
|
519
553
|
|
|
@@ -2173,6 +2207,35 @@ watch(
|
|
|
2173
2207
|
{ deep: true }
|
|
2174
2208
|
);
|
|
2175
2209
|
|
|
2210
|
+
/**
|
|
2211
|
+
* 处理容器尺寸变化,重新计算自适应缩放比例
|
|
2212
|
+
*/
|
|
2213
|
+
const handleContainerResize = () => {
|
|
2214
|
+
// 如果禁用了自适应宽度,或者用户主动缩放过,不自动调整
|
|
2215
|
+
if (!props.autoFitWidth || isUserZooming.value) {
|
|
2216
|
+
return;
|
|
2217
|
+
}
|
|
2218
|
+
|
|
2219
|
+
// 如果第一页图片还没有加载完成,不处理
|
|
2220
|
+
const firstPageSize = imageSizes.get(1);
|
|
2221
|
+
if (!firstPageSize || firstPageSize.width === 0) {
|
|
2222
|
+
return;
|
|
2223
|
+
}
|
|
2224
|
+
|
|
2225
|
+
// 使用防抖,避免频繁计算
|
|
2226
|
+
if (resizeTimer) {
|
|
2227
|
+
clearTimeout(resizeTimer);
|
|
2228
|
+
}
|
|
2229
|
+
|
|
2230
|
+
resizeTimer = setTimeout(() => {
|
|
2231
|
+
const newScale = calculateAutoFitScale();
|
|
2232
|
+
if (newScale > 0 && Math.abs(newScale - scale.value) > 0.01) {
|
|
2233
|
+
scale.value = newScale;
|
|
2234
|
+
initialAutoFitScale.value = newScale;
|
|
2235
|
+
}
|
|
2236
|
+
}, 150); // 150ms 防抖延迟
|
|
2237
|
+
};
|
|
2238
|
+
|
|
2176
2239
|
/**
|
|
2177
2240
|
* 组件挂载时的初始化
|
|
2178
2241
|
*/
|
|
@@ -2195,6 +2258,19 @@ onMounted(() => {
|
|
|
2195
2258
|
});
|
|
2196
2259
|
}
|
|
2197
2260
|
}
|
|
2261
|
+
|
|
2262
|
+
// 监听容器尺寸变化(用于响应外部收起/展开操作)
|
|
2263
|
+
nextTick(() => {
|
|
2264
|
+
if (containerRef.value && typeof ResizeObserver !== 'undefined') {
|
|
2265
|
+
resizeObserver = new ResizeObserver(() => {
|
|
2266
|
+
handleContainerResize();
|
|
2267
|
+
});
|
|
2268
|
+
resizeObserver.observe(containerRef.value);
|
|
2269
|
+
} else {
|
|
2270
|
+
// 降级方案:监听窗口大小变化
|
|
2271
|
+
window.addEventListener('resize', handleContainerResize);
|
|
2272
|
+
}
|
|
2273
|
+
});
|
|
2198
2274
|
});
|
|
2199
2275
|
|
|
2200
2276
|
/**
|
|
@@ -2209,6 +2285,16 @@ onBeforeUnmount(() => {
|
|
|
2209
2285
|
clearTimeout(scrollPagingTimer);
|
|
2210
2286
|
scrollPagingTimer = null;
|
|
2211
2287
|
}
|
|
2288
|
+
if (resizeTimer) {
|
|
2289
|
+
clearTimeout(resizeTimer);
|
|
2290
|
+
resizeTimer = null;
|
|
2291
|
+
}
|
|
2292
|
+
if (resizeObserver) {
|
|
2293
|
+
resizeObserver.disconnect();
|
|
2294
|
+
resizeObserver = null;
|
|
2295
|
+
}
|
|
2296
|
+
// 移除窗口 resize 监听器(降级方案)
|
|
2297
|
+
window.removeEventListener('resize', handleContainerResize);
|
|
2212
2298
|
});
|
|
2213
2299
|
|
|
2214
2300
|
defineExpose({
|