项目简介:
技术简介:JSP页面+SSM框架+JS+itextpdf
需求简介:点击预览XX,新开窗口,可下载,可怜打印机打印
实施方案:js点击事件向后端传id,window.open新开窗口,后端根据id查询数据库返回数据组装,itext画出PDF文件,返回流给前端页面
核心代码:
前端
//预览事件
function previewPDF(id){
var url = "后端方法路径/previewPDF?id="+id;
window.open(url);
}
后端
/**
* 预览PDF
* @throws DocumentException
* @throws IOException
*/
@RequestMapping(value = {"previewPDF"} )
public void previewPDF(
String id, HttpServletRequest request,
HttpServletResponse response, Model model) throws DocumentException, IOException {
String id= request.getParameter("id");
System.out.println("获取id--->"+id);
//获取数据
Xx xx = xxService.get(id);
//itext工具绘制PDF
Document document = new Document();
PdfWriter writer = null;
try {
//页面显示,如果写入磁盘不用此方法
writer = PdfWriter.getInstance(document, response.getOutputStream());
//设置页角页码
PdfHeaderFooter headerFooter = new PdfHeaderFooter(bfChinese2);//建立模板建立页脚
writer.setBoxSize("art",PageSize.A4.rotate());
writer.setPageEvent(headerFooter);
//开启文档
document.open();
//省略绘制表格细节
document.add(...);
} catch (Exception e) {
e.printStackTrace();
}finally {
if (document != null) {
document.close();
}
if (writer != null) {
writer.close();
}
}
}
分析:
因为没有前端插件的引用,读取的PDF为浏览器解析行为,因不同浏览器预览效果有不同差异,建议使用PDF.JS插件实现,具体实现demo参考文章:https://blog.csdn.net/czx2018/article/details/102586585