scalaJs對(duì)pdfJS的封裝

封裝代碼,如下:

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
}
}

這只是封裝了一部分代碼,還有好多東西由于沒有用到就沒有封裝進(jìn)去。目前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)
        }
      }
    }
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,001評(píng)論 25 709
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,652評(píng)論 18 399
  • 一 如果不是有人推薦,我永遠(yuǎn)不會(huì)去看這本《奇門遁甲》,甚至不會(huì)知道這個(gè)作家。周德東的書,不用說看了,聽都沒聽說過。...
    丁若柯閱讀 2,043評(píng)論 2 2
  • 君立河西牧, 妾坐河?xùn)|織。 君常托鵲兒, 問我何不思? 非我不相思, 徹夜難入眠。 只為早相見, 披星弄機(jī)梭。
    帝都奇妙物語閱讀 729評(píng)論 0 2
  • 母親是一位被歲月搪塞了大半輩子的女人,這些年活得艱難,過得樸素,沒什么事業(yè),若非要說有,那大概就是養(yǎng)育了我兄弟倆。...
    一顆浮萍閱讀 1,960評(píng)論 18 57

友情鏈接更多精彩內(nèi)容