需求:需要将多张二维码输出到pdf中,供前端下载,并在每个二维码下面添加名称信息
itext:
可以帮助我们根据生成pdf文件
maven坐标
<!-- /artifact/com.itextpdf/itextpdf --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency><!-- /artifact/com.itextpdf/itext-asian --><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>
操作流程:
controller 获取请求和响应对象
@RequestMapping(value = "/exportPdf")public void excelPdf(HttpServletRequest request, HttpServletResponse response) throws Exception {towerSiteService.exportPdf(request, response);}
service 对数据进行处理返回到前台
用到的对象
Document pdf文档对象
Rectangle 文档对象的格式
PdfPTable pdf表格对象
BaseFont 设置字体
Image 读取图片
PdfPCell 单元格
Paragraph 段落 可添加到单元格
public void exportPdf(HttpServletRequest request, HttpServletResponse response) {response.setContentType("application/pdf");// 设置文件名称response.setHeader("Content-Disposition", "attachment;filename=站址二维码.pdf");String hql = "from TowerSite g ";// 获取数据List<Data> list = 数据库.查询方法();// 设置纸张规格Document doc = new Document();Rectangle pageSize = new Rectangle(PageSize.A4.getHeight(), PageSize.A4.getWidth());doc.setPageSize(pageSize);try {PdfWriter.getInstance(doc, response.getOutputStream());doc.open();// 新建pdf表格PdfPTable table = new PdfPTable(4);for (Data data : list) {// 添加中文字体BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 设置字体Font font = new Font(bfChinese, 12, Font.NORMAL);Image image = Image.getInstance("图片地址");// 新建单元格PdfPCell cell = new PdfPCell();// 添加图片cell.addElement(image);// 设置站址编码cell.addElement(new Paragraph("测试标题1:" + data.getTitle(), font));// 设置站址名称cell.addElement(new Paragraph("测试标题2:" + data.getTitle(), font));table.addCell(cell);}//添加空格 撑开表格table.addCell("");pleteRow();doc.add(table);doc.close();} catch (Exception e) {e.printStackTrace();}}
具体流程:
创建文档对象 -----设置文档格式------创建表格对象—设置字体----获取图片----循环数据----创建单元格—向单元格添加图片–添加其他内容----将表格对象添加到文档对象–关闭文档