• java生成pdf文字水印和图片水印


    @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()); }
  • 相关阅读:
    .net制作安装程序总结 dodo
    部署ASP.NET(包含.net framework 和MDAC) dodo
    (转).Net应用程序发布的解决方案[最新整理](可加桌面快捷、在程序中加自己的ICO及自动卸载等) dodo
    Eric的日期选择下拉列表小控件 dodo
    如何通过需要验证的邮件服务器发送邮件? dodo
    异常详细信息: System.Security.SecurityException: 不允许所请求的注册表访问权 dodo
    登陆模块防止恶意用户SQL注入攻击 dodo
    C#插入记录时单引号的处理 dodo
    System.Configuration命名空间下找不到ConfigurationManager类 dodo
    常用的.net日期控件 dodo
  • 原文地址:https://www.cnblogs.com/pzw23/p/14437336.html
Copyright © 2020-2023  润新知