pdf.jsドメイン間解決方法——リモートロードpdf
2483 ワード
構想:閲覧が必要なpdfをバックグラウンドからファイルに転送してフロントエンドに伝えることで,ドメイン間問題を解決する.
jsコードはviewerに書きます.htmlに、pdfを参照します.jsの位置の前
jsコードは、ファイルストリームを受信するために使用されます.
バックグラウンドではjavaを通じてservletを書いてファイルをファイルストリームに変換しました.
参照リンク:https://blog.csdn.net/anciend/article/details/80062213ああ、Anciendの分かち合いに感謝
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の分かち合いに感謝