1、再要转换的页面中隐藏一个form表单,通过下面这种方式可以避免浏览器(比如火狐)禁用弹出新窗口的问题

<div style="display: none;">
     	<form id="htmlForm" action="后台接口地址" method="post" target="_blank">
     		<input id="htmlText" name="htmlText" type="text"/>
     	</form>
</div>

2、通过点击事件触发请求后台的函数  

function printTag(){
			var flag;
			if (window.ActiveXObject || "ActiveXObject" in window) {
			  //判断是否为IE浏览器,"ActiveXObject" in window判断是否为IE11
			  //判断是否安装了adobe Reader
			  for (x = 2; x < 10; x++) {
				  try {
				    oAcro = eval("new ActiveXObject('PDF.PdfCtrl." + x + "');");
				    if (oAcro) {flag = true;}
				  } catch (e) {
					  flag = false;
				  }
			    }
				try {
				  oAcro4 = new ActiveXObject('PDF.PdfCtrl.1');
				  if (oAcro4) { flag = true;}
				} catch (e) { flag = false;}

				try {
				  oAcro7 = new ActiveXObject('AcroPDF.PDF.1');
				  if (oAcro7) { flag = true;}
				} catch (e) { flag = false;}
				
				if (flag) {//支持
					closePrintCss();
					var htmlContext = $(".print-info").html();
					$("#htmlText").val(htmlContext);
					$("#htmlForm").submit();
					openPrintCss();
				}else {//不支持
				  $("#pdfContent").append("对不起,您还没有安装PDF阅读器软件呢,为了方便预览PDF文档,请选择安装!");
				  alert("对不起,您还没有安装PDF阅读器软件呢,为了方便预览PDF文档,请选择安装!");
				  location = "http://ardownload.adobe.com/pub/adobe/reader/win/9.x/9.3/chs/AdbeRdr930_zh_CN.exe";
				}

			}else {
				closePrintCss();
				var htmlContext = $(".print-info").html();
				$("#htmlText").val(htmlContext);
				$("#htmlForm").submit();
				openPrintCss();
			}
			
		}

3、后台使用PD4ML将html转换成pdf并返回文件流 

 @RequestMapping("showPdf")
    @Action(description="处理签pdf显示")
    public void showPdf(HttpServletRequest request,HttpServletResponse response) throws IOException{
    	String htmlContext= RequestUtil.getString(request, "htmlText");
		String serverUrl = AppConfigUtil.get("pcUrl");
		String staticUrl =AppConfigUtil.get("staticUrl");// PropertyUtil.getByAlias("staticUrl");
		htmlContext = htmlContext.replace("width:760px;", "width:609px;").replaceAll("760px", "609px")
				.replace("width:629px;", "width:549px;").replaceAll("629px", "549px")
				.replace("width:790px;", "width:639px;").replaceAll("790px", "639px")
				.replace("fzxbst", "KaiTi")
				.replace("'楷体';\"", "'KaiTi';\"")
				.replace("filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=hIEfix.png,sizingMethod=crop);zoom:1;", "")
		        .replace("href=\"css/FZXBSJW.css\"",
		        		"href=\"" + staticUrl+ "/styles/default2/css/FZXBSJW.css\"")
        		.replace("href=\"css/FZXBSJW-embed.css\"",
        		        "href=\"" + staticUrl+ "/styles/default2/css/FZXBSJW-embed.css\"");
		StringBuffer html = new StringBuffer();
        html.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">")
        .append("\r\n")
        .append("<html>")
        .append("\r\n")
        .append("<head>")
        .append("\r\n")
        .append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />")
        .append("\r\n")
        .append("<link title=\"index\" name=\"styleTag\" rel=\"stylesheet\" type=\"text/css\" href=\"" + staticUrl+ "/styles/default2/css/web.css\"></link>")
        .append("\r\n")
        .append("<link title=\"index\" name=\"styleTag\" rel=\"stylesheet\" type=\"text/css\" href=\"" + staticUrl+ "/styles/default2/css/form.css\"></link>")
        .append("\r\n")
        .append("</head>")
        .append("\r\n")
        .append("<body>")
        .append("\r\n")
        .append(htmlContext)
        .append("\r\n")
        .append("</body>")
        .append("\r\n")
        .append("</html>");

// 使用 ByteArrayOutputStream在内存中临时存放,避免新建文件磁盘存储 ByteArrayOutputStream bos = new ByteArrayOutputStream(); StringReader strReader = new StringReader(html.toString()); PD4ML pd4ml = new PD4ML(); pd4ml.setPageInsets(new Insets(20, 40, 10, 40));//位置:上边距、左边距、 下边距、右边距 pd4ml.setHtmlWidth(649); //pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4)); pd4ml.setPageSize(PD4Constants.A4); pd4ml.useTTF("java:fonts", true); //pd4ml.setDefaultTTFs("KaiTi","KaiTi", "Arial"); pd4ml.setDefaultTTFs("KaiTi","KaiTi", "Arial"); pd4ml.enableDebugInfo(); pd4ml.render(strReader, bos); strReader.close(); response.setContentType("application/pdf"); OutputStream out = response.getOutputStream(); out.write(bos.toByteArray()); bos.close(); out.close(); }

  

 

 

 

 

 

posted on 2020-10-22 16:03  壹敞雨  阅读(1026)  评论(0)    收藏  举报