首先你的制作一个pdf模板:
1.先用word做出模板界面
画单元格的时候需要考虑值的长度,像这里的状态可能会很长
2.文件另存为pdf格式文件
使用福昕PDF 打开,添加文本,以及需要添加值的地方,设置文本域,这个就是属性值
保存以后会生成PDF封面,需要去掉。
在线分封PDF
https://smallpdf.com/cn/result#r=1d5e4fbd858366eb5e4abe33a71ba648&t=split
代码
@GetMapping("/downOrderDashboard/{orderNo}")@ApiAuthoritypublic ResponseEntity<byte[]> downOrderDashboard(@PathVariable String orderNo,HttpServletResponse response,HttpServletRequest request) throws Exception {ByteArrayOutputStream byteArrayOutputStream = serialNumberService.downOrderDashboard(orderNo, request);HttpHeaders httpHeaders = new HttpHeaders();httpHeaders.setContentDispositionFormData("attachment", java.net.URLEncoder.encode("orderDB.pdf", "UTF-8"));httpHeaders.setContentType(MediaType.parseMediaType("application/pdf"));byte[] bytes = byteArrayOutputStream.toByteArray();return new ResponseEntity<byte[]>(bytes, httpHeaders,HttpStatus.CREATED);/*response.setContentType("application/pdf");response.setContentLength(byteArrayOutputStream.size());ServletOutputStream out = response.getOutputStream();byteArrayOutputStream.writeTo(out);out.flush();*/}
public ByteArrayOutputStream downOrderDashboard(String orderNo, HttpServletRequest request) {log.info("orderNo=" + orderNo);ByteArrayOutputStream outputstream = null;OrderDBDTO orderDashBoard = getOrderDashBoard(orderNo);log.info("orderDashBoard" + orderDashBoard.toString());try {//InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("classpath:pdf/orderDB.pdf"); ClassPathResource classPathResource = new ClassPathResource("pdf/orderDB.pdf");InputStream inputStream =classPathResource.getInputStream();//File file = ResourceUtils.getFile("classpath:pdf/orderDB.pdf");//String currentPath = request.getServletContext().getRealPath("\\");//String TemplatePDF = currentPath + "resources\\"+ "pdf\\" + "orderDB.pdf";log.info("inputStream"+inputStream);PdfReader reader = new PdfReader(inputStream);//new PdfReader(file.getAbsolutePath());outputstream = new ByteArrayOutputStream(4096);PdfStamper stamp = new PdfStamper(reader, outputstream);PdfContentByte under = stamp.getUnderContent(1); /*使用中文字体*/BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// Font FontChinese = new Font(bf, 10, Font.NORMAL);AcroFields form = stamp.getAcroFields();form.addSubstitutionFont(bf); //简宋体form.setField("productionOrderNo", orderDashBoard.getProductionOrderNo());OrderStatusType[] values = OrderStatusType.values();for (OrderStatusType value : values) {if(orderDashBoard.getStatus().equals(value.getResourceKey())){form.setField("state",value.getResourceKey() );}}form.setField("batchNo", orderDashBoard.getBatchNo());form.setField("lineName", orderDashBoard.getLineName());form.setField("productionDate", orderDashBoard.getProductionDate().format(DateTimeFormatter.ISO_LOCAL_DATE));form.setField("expiryDate", orderDashBoard.getExpiryDate().format(DateTimeFormatter.ISO_LOCAL_DATE));List<OrderSn> orderSnList = orderDashBoard.getOrderSnList();for (int i = 0; i < orderSnList.size(); i++) {form.setField("aggregationLevel"+(i+1), orderSnList.get(i).getAggreLevelName());form.setField("productCount"+(i+1), orderSnList.get(i).getProductCount()+"");form.setField("breakCount"+(i+1), orderSnList.get(i).getBreakCount()+"");form.setField("sampleCount"+(i+1), orderSnList.get(i).getSampleCount()+"");}stamp.setFormFlattening(true);stamp.close();reader.close();} catch (DocumentException e1) {log.info(e1.getMessage());e1.printStackTrace();} catch (IOException e2) {log.info(e2.getMessage());e2.printStackTrace();}return outputstream;}