美文网首页scalaJs仓库
scalaJs对pdfJS的封装

scalaJs对pdfJS的封装

作者: liaojianjun | 来源:发表于2017-09-07 11:46 被阅读0次

    封装代码,如下:

    import scala.scalajs.js
    import scala.scalajs.js.annotation._
    package object pdfJS {
    
    import org.scalajs.dom.CanvasRenderingContext2D
    
    @JSGlobal("PDFJS")
    @js.native
    object PDFJS extends js.Object {
    var workerSrc: String = js.native
    
    def getDocument(url: String): PDFDocumentLoadingTask = js.native
    }
    
    @js.native
    class PageViewport extends js.Object {
      val height: Double= js.native
    
      val width: Double = js.native
    }
    
    
    @js.native
    class PDFPageProxy extends js.Object {
      def getViewport(scale: Double): PageViewport = js.native
    
      def render(params: js.Object): js.Promise[RenderTask] = js.native
    }
    
    @ScalaJSDefined
    trait RenderContext extends js.Object {
      val canvasContext: CanvasRenderingContext2D
      val viewport: PageViewport
    }
    
    
     @js.native
    class RenderTask extends js.Object {
    
    }
    
    @js.native
    class PDFDocumentProxy extends js.Object {
      def getPage(pageNumber: Int ): js.Promise[PDFPageProxy] = js.native
    
      val numPages: Int = js.native
    }
    
    @js.native
    class PDFDocumentLoadingTask extends js.Object {
      def promise: js.Promise[PDFDocumentProxy] = js.native
      def onProgress:js.Object=js.native
    }
    }
    

    这只是封装了一部分代码,还有好多东西由于没有用到就没有封装进去。目前PDFDocumentLoadingTask 中的onProgress的值一直为null 还没有理解,别的都可以正常使用。
    下面是使用的代码:

    object DrawPDF {
    
    def draw(area: HTMLElement, url: String) = {
    
    //1.8.618
    PDFJS.workerSrc = "/zhishiku/static/js/pdf.worker.min.js"
    val loadingTask = PDFJS.getDocument(url)
    
    println(JSON.stringify(loadingTask))
    
    println(loadingTask.onProgress)
    
    loadingTask.promise.toFuture.map {
      rsp =>
    
        area.textContent = ""
        println(url + "PDF loaded")
    
        for (i <- 1 to rsp.numPages) {
    
          rsp.getPage(i).toFuture.onComplete {
            case Success(rsp1) =>
              println("Page loaded")
    
    
              val viewportDiv = rsp1.getViewport(1.5)
    
              val pdfArea = canvas("Your browser does not support the canvas element.").render
    
              area.appendChild(pdfArea)
              val context = pdfArea.getContext("2d").asInstanceOf[CanvasRenderingContext2D]
    
    
              pdfArea.height = viewportDiv.height.toInt+1
              pdfArea.width = viewportDiv.width.toInt+1
    
              val renderContext = new RenderContext {
                override val canvasContext = context
                override val viewport = viewportDiv
              }
    
              println(renderContext)
              println("2")
    
              val renderTask =
                try {
                  rsp1.render(renderContext)
                }
                catch {
                  case error: Exception =>
                    error.printStackTrace()
                    throw error
                }
              renderTask.toFuture.onComplete {
                case Success(rsp2) =>
                  println("Page rendered")
                case Failure(error) =>
                  println("rsp.render" + error)
              }
            case Failure(error) =>
              println("rsp.getPage()" + error)
            }
          }
        }
      }
    }
    

    相关文章

      网友评论

        本文标题:scalaJs对pdfJS的封装

        本文链接:https://www.haomeiwen.com/subject/spfijxtx.html