pdf.jsドメイン間解決方法——リモートロードpdf


構想:閲覧が必要なpdfをバックグラウンドからファイルに転送してフロントエンドに伝えることで,ドメイン間問題を解決する.
jsコードはviewerに書きます.htmlに、pdfを参照します.jsの位置の前
jsコードは、ファイルストリームを受信するために使用されます.

      var PDFData = "";
      $.ajax({
          type:"get",
          crossDomain:true,
          async:false, // false         
          mimeType:'text/plain;charset=x-user-defined',
          url:"http://localhost:8080/Convert?type=getPdf",
          success:function (data) {
              PDFData = data; // data byte[]  
          }

      });
      var rawLength = PDFData.length;
      //    pdf.js      Uint8Array  , pdf.js-4068
      var array = new Uint8Array(new ArrayBuffer(rawLength));
      for(var i = 0;i<rawLength;i++){
          array[i] = PDFData.charCodeAt(i)&0xff;
      }
      var pdf_url = array;

    

バックグラウンドではjavaを通じてservletを書いてファイルをファイルストリームに変換しました.
package main;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

@WebServlet(name = "Convert")
public class Convert extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("application/pdf");
        response.setHeader("Access-Control-Allow-Origin", "*"); //          
        ServletOutputStream sos = response.getOutputStream();
        String destUrl = "http://39.107.117.248/pdf-store/caseFile.pdf";
        URL url = new URL(destUrl);
        HttpURLConnection httpUrl = (HttpURLConnection)url.openConnection();
        //          
        httpUrl.connect();
        //        
        BufferedInputStream bis = new BufferedInputStream(httpUrl.getInputStream());
        int b;
        while ((b = bis.read())!= -1){
            sos.write(b);
        }
        sos.close(); //      c           
        bis.close();
    }
}

参照リンク:https://blog.csdn.net/anciend/article/details/80062213ああ、Anciendの分かち合いに感謝