Преглед изворни кода

fix: 修复注释被多次渲染bug

liutian пре 1 година
родитељ
комит
2ad49e8623

+ 10 - 3
packages/core/src/annotation/layer.js

@@ -80,7 +80,8 @@ class ComPDFAnnotationLayer {
     this.pageViewer.color = color
 
     if (!this.svgElement) {
-      this.svgElement = this.pageDiv.querySelector('.annotationLayer svg')
+      this.destroy()
+      this.renderPaintScene()
     }
 
     const markup = ['highlight', 'underline', 'squiggly', 'strikeout']
@@ -920,9 +921,15 @@ class ComPDFAnnotationLayer {
 
   // 画布重置
   destroy () {
-    this.svgElement.remove()
+    if (!this.svgElement) {
+      this.svgElement = this.pageDiv.querySelector('.annotationLayer svg')
+    }
+    this.svgElement?.remove()
     this.svgElement = null
-    this.div.remove()
+    if (!this.div) {
+      this.div = this.pageDiv.querySelector('.annotationContainer')
+    }
+    this.div?.remove()
     this.div = null
     if (this.freetextManager) {
       this.freetextManager.reset()

+ 1 - 1
packages/core/src/annotation/link.js

@@ -444,7 +444,7 @@ export default class Link extends Base {
     this.outerLineContainer.remove()
 
     if (!this.annotation.url && !this.annotation.destPage) {
-      this.handleDelete('delete')
+      this.handleDelete()
     }
   }
 

+ 4 - 0
packages/core/src/form/text_field.js

@@ -896,6 +896,8 @@ export default class TextField extends Base {
         'textarea',
         {
           position: 'absolute',
+          left: 0,
+          top: 0,
           width: '100%',
           height: '100%',
           outline: 'none',
@@ -919,6 +921,8 @@ export default class TextField extends Base {
         'input',
         {
           position: 'absolute',
+          left: 0,
+          top: 0,
           width: '100%',
           height: '100%',
           outline: 'none',

+ 2 - 0
packages/core/src/pdf_page_view.js

@@ -1166,6 +1166,8 @@ class PDFPageView {
               selected: this.selected,
               $t: this.$t
             })
+          } else {
+            this.compdfAnnotationLayer.destroy()
           }
           this.compdfAnnotationLayer.render(this.viewport)
 

+ 1 - 0
packages/core/src/pdf_presentation_mode.js

@@ -173,6 +173,7 @@ class PDFPresentationMode {
     // Ensure that the correct page is scrolled into view when entering
     // Presentation Mode, by waiting until fullscreen mode in enabled.
     setTimeout(() => {
+      this.pdfViewer.scrollMode = ScrollMode.PAGE;
       if (this.#args.spreadMode !== null) {
         this.pdfViewer.spreadMode = SpreadMode.NONE;
       }