首先在 viewer.jsp添加如下代码
<script>
var DEFAULT_URL = "";//注意,删除的变量在这里重新定义
var PDFData = "";
$.ajax({
type : "post",
async : false, //
mimeType : 'text/plain; charset=x-user-defined',
url : "<%=basePath %>pdf/viewerit.html",
success : function(data) {
PDFData = data;
}
});
var rawLength = PDFData.length;
//转换成pdf.js能直接解析的Uint8Array类型,见pdf.js-4068
var array = new Uint8Array(new ArrayBuffer(rawLength));
for (i = 0; i < rawLength; i++) {
array[i] = PDFData.charCodeAt(i) & 0xff;
}
DEFAULT_URL = array;
</script>
然后后台代码
@ResponseBody
@RequestMapping("viewerit.html")
public void viewerit(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/pdf;charset=UTF-8");
File file = new File("E:/1.pdf");
FileInputStream in = new FileInputStream(file);
BufferedInputStream input = new BufferedInputStream(in);
byte buffBytes[] = new byte[1024];
int read = 0;
while ((read = input.read(buffBytes)) != -1) {
response.getOutputStream().write(buffBytes, 0, read);
}
response.getOutputStream().flush();
response.getOutputStream().close();
}
如此便能以流的形式观看pdf,然后我屏蔽了所有的下载按钮,发现按ctrl+s依然能下载pdf于是在viewer.js 添加代码
document.addEventListener("keydown", function(e) {
if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
e.preventDefault();
e.stopPropagation();
}
}, false);
但未找到原因为什么还是可以按ctrl+s下载 于是我又在外边包了层iframe
<iframe id="childframe" src="<c:url value="/pdf/viewer.html" />" width=100% height=1000px;></iframe>
让viewer.jsp变成frame中的内容 再按ctrl+s无法下载 大功告成