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();
}
浙公网安备 33010602011771号