• java根据模板生成PDF


    首先你的制作一个pdf模板:

    1.先用word做出模板界面

    画单元格的时候需要考虑值的长度,像这里的状态可能会很长

    2.文件另存为pdf格式文件

     使用福昕PDF 打开,添加文本,以及需要添加值的地方,设置文本域,这个就是属性值

     

    保存以后会生成PDF封面,需要去掉。

    在线分封PDF

    https://smallpdf.com/cn/result#r=1d5e4fbd858366eb5e4abe33a71ba648&t=split

    代码

     @GetMapping("/downOrderDashboard/{orderNo}")
        @ApiAuthority
        public 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;
        }
  • 相关阅读:
    python--数据可视化
    python--数据处理与探索
    如何使用.NET开发全版本支持的Outlook插件产品(四)——进阶探讨
    如何使用.NET开发全版本支持的Outlook插件产品(三)——全面控制
    对于.NET Socket连接的细节记录
    如何使用.NET开发全版本支持的Outlook插件产品(二)——完善插件
    如何使用.NET开发全版本支持的Outlook插件产品(一)——准备工作
    不建议双挖
    不要挖门罗
    关于PoW工作量证明的不公平
  • 原文地址:https://www.cnblogs.com/lyon91/p/11184961.html
Copyright © 2020-2023  润新知