目標文件:遠程pdf文件和本地文件(不是放在webapp下的文件,是電腦任意磁盤上的本地文件)
解決思路:
1.都是以文件流的形式來進行加載pdf文檔,完美解決跨域問題
2.寫一個servlet,將文件流輸出,瀏覽器可直接打開,展示該pdf
注意: 至於pdf.js插件的使用,上官網即可,我不做過多解釋了,網上也有很多
前端展示:http://localhost:6443/web/PDFDemo/pdfjs/generic/web/viewer.html?file=URL
其中URL=你寫的servlet的鏈接
加載遠程文件 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();
//這裏的 destUrl目前是固定的,實際應用中需要動態獲取
String destUrl = "http://39.107.117.248/pdf-store/caseFile_origin.pdf"; // 遠程文件途徑,這是我放在遠程服務器的
//tomcat /webapp下的文件,該鏈接可通過瀏覽器直接打開,你可以用它來進行測試;
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();
}
}
加載本地文件 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.File;
import java.io.FileInputStream;
import java.io.IOException;
@WebServlet(name = "ConvertLocal")
public class ConvertLocal 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 {
String fileName = request.getParameter("fileName");
response.setHeader("Access-Control-Allow-Origin", "*"); // 解決請求頭跨域問題
response.setContentType("application/pdf");
File f1 = new File("E:\\testfiles-pdf\\"+fileName);
FileInputStream reader= new FileInputStream(f1);
BufferedInputStream BufferReader = new BufferedInputStream(reader);
// 創建servlet 輸出流對象
ServletOutputStream sos = response.getOutputStream();
int b;
while ((b = BufferReader.read())!= -1){
sos.write(b);
}
sos.close(); // 這裏有點和c語言裏的讀取文件有點像
reader.close();
}
}