关于 pdfjs实现页面生成pdf 加密(base64)传输到后
2020-12-27 本文已影响0人
鄙人_阿K
1、引入js
image.png
2、代码
1、包括需要生成的
image.png
2、js部分
// 测试 pdf 加密后传输
function pdfTobase64(){
// 此处必须 copy dom 这是 原生pdfjs的一个bug
let targetDom = $("#bodyto");
var copyDom = targetDom.clone();
copyDom.addClass('super');
copyDom.width(targetDom.width() + "px");
copyDom.height(targetDom.height() + "px");
$('body').append(copyDom);
copyDom.css({ "background": "#FFFFFF" });
html2canvas(copyDom, {
allowTaint: true,
taintTest: false,
onrendered: function (canvas) {
var contentWidth = canvas.width;
var contentHeight = canvas.height;
//一页pdf显示html页面生成的canvas高度;
var pageHeight = contentWidth / 592.28 * 841.89;
//未生成pdf的html页面高度
var leftHeight = contentHeight;
//页面偏移
var position = 0;
//a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
var imgWidth = 595.28;
var imgHeight = 592.28/contentWidth * contentHeight;
var pageData = canvas.toDataURL('image/jpeg', 1.0);
var pdf = new jsPDF('', 'pt', 'a4');
//有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
//当内容未超过pdf一页显示的范围,无需分页
if (leftHeight < pageHeight) {
pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight );
} else {
while(leftHeight > 0) {
pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
leftHeight -= pageHeight;
position -= 841.89;
//避免添加空白页
if(leftHeight > 0) {
pdf.addPage();
}
}
}
// pdf.save($('#enName').val()+"的出入境.pdf");
//需要dataUrl格式
//pdf.addImage(pageData, 'JPEG', 0, 0, 595.28, 592.28 / canvas.width * canvas.height);
// pdf.save('pdf.pdf');//调用这个就是直接在前台进行下载
//去掉前面的字符串后,就是文件的加密字符串
var datauri = pdf.output('dataurlstring');
var base64 = datauri.substring(28); //然后把这个字符串送到后台解密
//移除添加的元素
copyDom.remove();
// $('.super').remove();
var url="${ctx}/entryae/entryae!sendPDF.action"//自己的地址
$.post(url, { file: base64 }, function (returndata) {
try {
var ss = JSON.parse(returndata);
//如果想要关闭当前页,网上有很多,这里就说一下谷歌浏览器,
//谷歌浏览器比较特殊,只能把window.location.href = 'about:blank '才可以关闭
//window.open("about:blank", "_self").close();//关闭当前页
window.open(JSON.parse(ss[0]).data.url);
$('#GZSP_XS_Sure_Mask').hide();
} catch (e) {
$.messager.alert('提示', returndata, 'info');
}
});
}
});
}
3、后端代码
/**
* 接受pdf 处理
*/
public String sendPDF() throws Exception {
// 前端发送过来的 base64
String file = request.getParameter ("file");
String fileName = "aaaaaaaa";// 前端传送
String realPath = request.getSession ( ).getServletContext ( ).getRealPath ("/");
String path = realPath + "upload\\pdf2\\";// 统一文件夹地址
String filePath = path + fileName + ".pdf";// 组合的最终路径
// 如果没有则创建
File headPath2 = new File (filePath);//获取文件夹路径
createFileOrDir (headPath2);
stringSaveAsFile (file, filePath);
// 测试地址:xxxxxxxxxx、adp/WzhWebService.ws?wsdl
String serviceUrl = "http://xxxx.xxxx.xxx/adp/WzhWebService.ws";
Service service = new ObjectServiceFactory ( ).create (WzhWebService.class);
XFireProxyFactory factory = new XFireProxyFactory ( );
WzhWebService wzhWebService = (WzhWebService) factory.create (service, serviceUrl);
Map map = new HashMap ( );
map.put ("xxxxxx", "xxxxxxx");
map.put ("xxxxxxx", "xxxxxxx");
map.put ("pdfName", fileName);
map.put ("xxxxxxxx", "xxxxxxxx");// (印章)
map.put ("xxxxxxxx", "xxxxxxxx");
// 印章位置
// map.put("llx", "80") ;
// map.put("lly", "100") ;
map.put ("urx", "230");
map.put ("ury", "250");
map.put ("pdfData", file);
String param = JSONObject.fromObject (map).toString ( );
String rstr = wzhWebService.WzhQzService (param);// 发送报文后返回的数据
JSONObject jsonObject = JSONObject.fromObject (rstr);
String rtnData = jsonObject.getString ("rtnData");
JSONObject data = JSONObject.fromObject (rtnData);
String fileUrl = data.getString ("fileUrl");
// String toPath = "C://abc//"+fileName+"_signe.pdf" ;
stringSaveAsFile (fileUrl, filePath);
return null;
}