[前端+RAG] 修复PDF ArrayBuffer detached;修复阅读模式右侧空白(覆盖PyMuPDF固定宽度)
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, onBeforeUnmount, nextTick, watch } from 'vue';
|
||||
import { ref, onMounted, onBeforeUnmount, nextTick, watch, toRaw } from 'vue';
|
||||
import * as pdfjsLib from 'pdfjs-dist';
|
||||
import { renderTextLayer } from 'pdfjs-dist';
|
||||
|
||||
@@ -74,9 +74,9 @@ const loadPdf = async () => {
|
||||
loading.value = true;
|
||||
error.value = '';
|
||||
try {
|
||||
const loadingTask = pdfjsLib.getDocument({
|
||||
data: props.src instanceof ArrayBuffer ? new Uint8Array(props.src) : props.src
|
||||
});
|
||||
const rawSrc = toRaw(props.src);
|
||||
const data = rawSrc instanceof ArrayBuffer ? new Uint8Array(rawSrc) : rawSrc;
|
||||
const loadingTask = pdfjsLib.getDocument({ data });
|
||||
pdfDoc = await loadingTask.promise;
|
||||
const numPages = pdfDoc.numPages;
|
||||
pages.value = Array.from({ length: numPages }, (_, i) => i + 1);
|
||||
|
||||
@@ -460,7 +460,11 @@ const loadPdfFile = async () => {
|
||||
params: { fileId: selectedFile.value.fileId },
|
||||
responseType: 'arraybuffer'
|
||||
});
|
||||
pdfData.value = resp.data;
|
||||
// 复制 ArrayBuffer 避免被 Vue 响应式代理导致 detached
|
||||
const src = resp.data as ArrayBuffer;
|
||||
const copy = new ArrayBuffer(src.byteLength);
|
||||
new Uint8Array(copy).set(new Uint8Array(src));
|
||||
pdfData.value = copy;
|
||||
} catch (e: any) {
|
||||
pdfData.value = null;
|
||||
docHtml.value = '<p style="color:#999;text-align:center;margin-top:40px;">PDF 文件加载失败</p>';
|
||||
|
||||
Reference in New Issue
Block a user