@GetMapping(value = "/dypdf/", produces = MediaType.APPLICATION_PDF_VALUE)
    public ResponseEntity<InputStreamResource> dypdf(@RequestParam(value = "ztId") int ztId, @RequestParam(value = "year") int year,
                                                     @RequestParam(value = "month") int month, @RequestParam(value = "gzmbglId") int gzmbglId,
                                                     @RequestParam(value = "dyfs") String dyfs) throws DocumentException, IOException, WriterException {

        List<RslGzmbnrView> btList = gzmbnrglRepository.findAllByZtIdAndEnableAndGzmbglId(ztId, true, gzmbglId).stream().sorted(Comparator.comparing(Gzmbnrgl::getXh)).map(this::toRslGzmbnrView).collect(Collectors.toList());
        Gzmbgl gzmbgl = gzmbglRepository.findById(gzmbglId).orElseThrow();
        Bmrydygl bmrydygl = bmrydyglRepository.findByZtIdAndUserId(ztId, user.getId());

        List<JjjtbmPdfView> views = getJjjtbmPdfView(ztId, year, month, gzmbglId, bmrydygl);
        String qj = year + "年" + month + "月";

        var headers = new HttpHeaders();
        headers.add("Content-Disposition", "inline; filename=demo.pdf");
//不加水印
//        var bis = createDocument(btList, views, gzmbgl, bmrydygl, qj, dyfs);
        //加水印
        PdfReader reader = new PdfReader(createDocument(btList, views, gzmbgl, bmrydygl, qj, dyfs));
        var out = new ByteArrayOutputStream();
        PdfStamper stamper = new PdfStamper(reader, out);
        int total = reader.getNumberOfPages();
     //每一页都需要生成水印,从第一页开始
        for (int i = 1; i <= total; i++) {
            PdfGState gs = new PdfGState();
            // 透明度设置
            gs.setFillOpacity(0.3f);
            // 水印在之前文本下
            var under = stamper.getUnderContent(i);
            //水印在之前文本上
            // under = stamp.getOverContent(i);
            
            under.setGState(gs);
            //一定需要setFontAndSize,要不然会报错           
under.setFontAndSize(BaseFont.createFont("fonts/simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED), 40);
            //两个100表示坐标
            under.showTextAligned(PdfContentByte.ALIGN_CENTER, "xxxx集团有限公司", 100, 100, 0);

        }
        stamper.close();// 关闭
        var bis = new ByteArrayInputStream(out.toByteArray());

       //图片水印
       // var bis = createDocument1(btList, views, gzmbgl, bmrydygl, qj, dyfs, getClass().getResource("/p206.png"));
        return ResponseEntity
                .ok()
                .headers(headers)
                .contentType(MediaType.APPLICATION_PDF)
                .body(new InputStreamResource(bis));

    }

//自定义生成document
private ByteArrayInputStream createDocument(List<RslGzmbnrView> btList, List<JjjtbmPdfView> views, Gzmbgl gzmbgl, Bmrydygl bmrydygl, String qj, String dyfs) throws DocumentException, IOException {
       /* Rectangle rectangle = new Rectangle(637.8f, 226.77f);
        var document = new Document(rectangle);*/
        var document = new Document(PageSize.A4);
        var out = new ByteArrayOutputStream();
        document.setPageSize(PageSize.A4);
        document.setMargins(10f, 10f, 10f, 10f);
        PdfWriter.getInstance(document, out);
        document.open();
        //自定义生成表格
        createTable(document, btList, views, gzmbgl, bmrydygl, qj, dyfs);
        document.close();
        return new ByteArrayInputStream(out.toByteArray());
    }    


private ByteArrayInputStream createDocument1(List<RslGzmbnrView> btList, List<JjjtbmPdfView> views, Gzmbgl gzmbgl, Bmrydygl bmrydygl, String qj, String dyfs, URL mark) throws DocumentException, WriterException, IOException {
        var out = new ByteArrayOutputStream();
        // 原始pdf
        PdfReader reader = new PdfReader(createDocument(btList, views, gzmbgl, bmrydygl, qj, dyfs));
        // 带水印pdf
        PdfStamper stamper = new PdfStamper(reader, out);

        Image water = Image.getInstance();
        // 坐标
        water.setAbsolutePosition(0, 0);
  /*      // 旋转 弧度
        water.setRotation(0);
        // 旋转 角度
        water.setRotationDegrees(45);*/
        // 依照比例缩放
        water.scalePercent(1);

        // 原pdf文件的总页数
        int pageSize = reader.getNumberOfPages();
        for (int i = 1; i <= pageSize; i++) {
            PdfGState gs = new PdfGState();
            // 透明度设置
            gs.setFillOpacity(0.9f);
            // 水印在之前文本下
            var under = stamper.getUnderContent(i);
            //水印在之前文本上
            // under = stamp.getOverContent(i);
            // 图片水印 透明度
            under.setGState(gs);
            // 图片水印
            under.addImage(water);
        }

        stamper.close();// 关闭


        return new ByteArrayInputStream(out.toByteArray());
    }