zoukankan      html  css  js  c++  java
  • 关于根据模板生成pdf文档,差入图片和加密

    import com.alibaba.fastjson.JSONObject;
    import com.aliyun.oss.OSSClient;
    import com.itextpdf.text.pdf.*;
    import com.swetake.util.Qrcode;
    import com.titifootball.common.base.BaseController;
    import com.titifootball.presentation.common.constant.PresentationConstants;
    import com.titifootball.presentation.dao.model.*;
    import com.titifootball.presentation.rpc.api.UresultAttributeService;
    import com.titifootball.presentation.rpc.api.UresultPresentationService;
    import com.titifootball.presentation.rpc.api.UresultTypeService;
    import io.swagger.annotations.ApiOperation;
    import org.apache.batik.transcoder.TranscoderException;
    import org.apache.batik.transcoder.TranscoderInput;
    import org.apache.batik.transcoder.TranscoderOutput;
    import org.apache.batik.transcoder.image.JPEGTranscoder;
    import org.apache.http.HttpEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    import javax.imageio.ImageIO;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.*;
    import java.net.MalformedURLException;
    import java.net.URI;
    import java.net.URL;
    import java.text.SimpleDateFormat;
    import java.util.*;
    import java.util.List;
    
    
    /**
     * PdfExportController
     * @author jianhun
     * @date 2018/08/29
     */
    
    @Controller
    @RequestMapping("/manage/pdf/v1")
    public class PlayerReportExportController extends BaseController {
        private final String TEAM_PLAYER_URL="http://localhost:6664/api/v1/upms/team/player/list?teamIds=*";
        private final String PLAYER_URL="http://localhost:6664/api/v1/upms/player/list?playerIds=*";
        private static final Logger LOGGER = LoggerFactory.getLogger(PlayerReportExportController.class);
    
        @Autowired
        private UresultPresentationService uresultPresentationService;
        @Autowired
        private UresultAttributeService uresultAttributeService;
    
        @Autowired
        private UresultTypeService uresultTypeService;
    
        @Autowired
        HttpServletRequest request;
    
        String SvgPngPath = "";
        String Path = "";
    
        @RequestMapping(value = "/index", method = RequestMethod.GET)
        public String index() {
    
    
            return "/manage/PDF/index.jsp";
        }
        @ApiOperation(value = "Svg转Png")
        @RequestMapping(value = "/svgPng", method = RequestMethod.POST)
        @ResponseBody
        public Map svgPng(@RequestParam(value = "svg") String svg) throws Exception {
            Map resultMap=new HashMap();
            Boolean flag=false;
            String msg="";
            flag=true;
            resultMap.put("flag",flag);
            resultMap.put("message",msg);
            SvgPng(svg);
            return resultMap;
        }
    
    
        public void  SvgPng(String svg) throws Exception {
            String pathSvg = request.getSession().getServletContext().getRealPath( "/")+"\pdf\"+"img\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+"Radar"+ ".svg";
            String pathPng = request.getSession().getServletContext().getRealPath( "/")+"\pdf\"+"img\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+"Radar"+ ".png";
            FileWriter fw = null;
            File f = new File(pathSvg);
            try {
                if (!f.exists()) {
                    f.createNewFile();
                }
                fw = new FileWriter(f);
                BufferedWriter out = new BufferedWriter(fw);
                out.write(svg, 0, svg.length());
                out.close();
    
            } catch (IOException e) {
                e.printStackTrace();
            }
            changeSvgToJpg(pathPng, pathSvg);
        }
        private  void changeSvgToJpg(String pistrPngFile, String pistrSvgPath) {
            Date date = new Date();
            long timeBegin = date.getTime();
            String strSvgURI;// svg文件路径
            OutputStream ostream = null;
            File fileSvg = null;
            try {
                fileSvg = new File(pistrSvgPath);
                URI uri = fileSvg.toURI();// 构造一个表示此抽象路径名的 file:URI
                URL url = uri.toURL();// 根据此 URI 构造一个 URL
                strSvgURI = url.toString();
                TranscoderInput input = new TranscoderInput(strSvgURI);// 定义一个通用的转码器的输入
    
                ostream = new FileOutputStream(pistrPngFile);
                TranscoderOutput output = new TranscoderOutput(ostream);// 定义单路输出的转码器
                JPEGTranscoder transcoder = new JPEGTranscoder();// 构造一个新的转码器,产生JPEG图像
                transcoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(0.8));// 设置一个转码过程,JPEGTranscoder.KEY_QUALITY设置输出png的画质精度,0-1之间
                transcoder.transcode(input, output);// 转换svg文件为png
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (TranscoderException e) {
                e.printStackTrace();
            } finally {
                try {
                    ostream.flush();
                    ostream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            request.getSession().setAttribute("png",pistrPngFile);
    
            fileSvg.delete();// 删除svg文件
    
        }
    
        @RequestMapping(value = "/exportPdf", method = RequestMethod.GET)
        @ResponseBody
        public Map exportPdf(@RequestParam(value = "assessPlayerId") Long assessPlayerId, HttpServletRequest request) throws Exception {
            Map resultMap=new HashMap();
            Boolean flag=false;
            String msg="";
            Map<String, String> reportData = new HashMap<>(16);
            Long teamId=0L;
            Long playerId=0L;
           try {
               HttpGet requestTeamPlayer = new HttpGet(TEAM_PLAYER_URL.replace("*",assessPlayerId.toString()));
               CloseableHttpResponse response = null;
               CloseableHttpClient httpClient = HttpClientBuilder.create().build();
               response = httpClient.execute(requestTeamPlayer);//执行HttpGet请求
               HttpEntity httpEntity = response.getEntity();//获得实体
               if (httpEntity != null) {
                   InputStream instreams = httpEntity.getContent();
                   JSONObject jsonObject=JSONObject.parseObject(convertStreamToString(instreams));
                   if(jsonObject.getInteger("code")==1){
                       teamId=jsonObject.getJSONArray("data").getJSONObject(0).getLong("teamId");
                       playerId=jsonObject.getJSONArray("data").getJSONObject(0).getLong("playerId");
                   }
               }
    
    
    
               String basePath = request.getSession().getServletContext().getRealPath( "/")+"\pdf\";
               String basePathImg = request.getSession().getServletContext().getRealPath( "/")+"\pdf\"+"img\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+ ".png";
               HttpSession session= ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getSession();
               getQrCodeImg("titifootball.com",basePathImg);
               Date date = new Date();
               SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd");
               String time = sdf.format(date);
    
               reportData.put("reportDate",time);
               reportData.put("reportDate1",time);
               reportData.put("reportDate2",time);
               reportData.put("reportDate3",time);
               reportData.put("reportDate4",time);
               reportData.put("reportDate5",time);
               reportData.put("qrcode",basePathImg);
               reportData.put("qrcode2",basePathImg);
               reportData.put("qrcode3",basePathImg);
               reportData.put("qrcode4",basePathImg);
               reportData.put("qrcode5",basePathImg);
               reportData.put("qrcode6",basePathImg);
               reportData.put("PI15","D:\A.jpeg");
               reportData.put("Radarchart",(String) session.getAttribute("png"));
               System.out.println(reportData);
               List<Long> uresultTypeIdList = new ArrayList<>();
               UresultTypeExample uresultTypeExample = new UresultTypeExample();
               uresultTypeExample.createCriteria()
                       .andIsDeletedEqualTo(PresentationConstants.NO);
               uresultTypeExample.setOrderByClause("id desc");
               List<UresultType> uresultTypeList = uresultTypeService.selectByExample(uresultTypeExample);
               if(null != uresultTypeList && uresultTypeList.size() > 0) {
                   for(UresultType uresultType : uresultTypeList) {
                       uresultTypeIdList.add(uresultType.getId());
                   }
                   UresultPresentationExample uresultPresentationExample = new UresultPresentationExample();
                   uresultPresentationExample.createCriteria()
                           .andIsDeletedEqualTo(PresentationConstants.NO)
                           .andAssessmentIdEqualTo(1L)
                           .andAssessPlayerIdEqualTo(assessPlayerId)
                           .andTypeIn(uresultTypeIdList)
                           .andStateEqualTo(PresentationConstants.YES);
                   uresultPresentationExample.setOrderByClause("id asc");
                   List<UresultPresentationDetail> uresultPresentationDetailList =
                           uresultPresentationService.selectUresultPresentationDetailByExampleForOffsetPage(
                                   uresultPresentationExample, 0, 10000);
                   for(UresultPresentationDetail uresultPresentationDetail : uresultPresentationDetailList) {
                       UresultAttribute uresultAttribute=uresultPresentationDetail.getUresultAttribute();
                       if(null!=uresultAttribute){
                           String key = uresultPresentationDetail.getUresultAttribute().getCode();
                           String value = uresultPresentationDetail.getAttrValue();
                           if (null!=value){
                               value+=" "+(null!=uresultPresentationDetail.getUresultAttribute().getUnit()?uresultPresentationDetail.getUresultAttribute().getUnit():"");
                           }
                           reportData.put(key, value);
                       }
                   }
               }
               String Name = "1";
               String identification = "2";
    
               for (String key : reportData.keySet()) {
                   Path = reportData.get("qrcode");
                   SvgPngPath = reportData.get("Radarchart");
                   Name = reportData.get("PI06");
                   identification = reportData.get("PI12");
               }
               String newPdfName= /*Name+"-"+identification+*/"1.pdf";
               reportData=generalPdf(basePath+"template/pdf-template.pdf",basePath+"data/"+newPdfName,reportData);
    
               OSSClient client = new OSSClient(com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ENDPOINT, com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ACCESSKEYID, com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ACCESSKEYSECRET);
               String fileUrl="http://"+ com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_BUCKNAME+"."+ com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ENDPOINT+"/user-report/"+newPdfName;
               client.putObject(com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_BUCKNAME, "user-report/"+newPdfName, new File(basePath+"data/"+newPdfName));
               client.shutdown();
               File pdfFile=new File(basePath+"data/"+newPdfName);
               if (pdfFile.exists()){
                   pdfFile.deleteOnExit();
               }
               reportData.put("url",fileUrl);
               DeleteFile(SvgPngPath,Path);
               return  reportData;
           }catch (Exception e){
               e.printStackTrace();
               msg=e.getLocalizedMessage();
           }
            resultMap.put("flag",flag);
            resultMap.put("message",msg);
            return resultMap;
        }
        public  Map generalPdf(String templatePath,String newPdfPath,Map reportData){
            Map resultMap=new HashMap();
            Boolean flag=false;
            String msg="";
            PdfReader reader;
            FileOutputStream out;
            ByteArrayOutputStream bos;
            PdfStamper stamper;
            PdfImportedPage importedPage;
            try {
                out=new FileOutputStream(newPdfPath);
                reader=new PdfReader(templatePath);
                bos=new ByteArrayOutputStream();
                stamper=new PdfStamper(reader,bos);
                AcroFields form=stamper.getAcroFields();
                Iterator<String> iterator=form.getFields().keySet().iterator();
    
                while (iterator.hasNext()){
                    String name=iterator.next().toString();
                    String value=(!reportData.containsKey(name))?"-":reportData.get(name).toString();
                    System.out.println(name+"<------->"+value);
                    form.setField(name,value);
                    if(("PI15".equals(name)) || ("Radarchart".equals(name))||("qrcode".equals(name)) || ("qrcode2".equals(name)) ||("qrcode3".equals(name)) || ("qrcode4".equals(name)) || ("qrcode5".equals(name)) || ("qrcode6".equals(name))){
                        String imgpath = reportData.get(name).toString();
                        System.out.println(form.getFieldPositions(name));
                        int pageNo = form.getFieldPositions(name).get(0).page;
                        System.out.println(pageNo);
                        com.itextpdf.text.Rectangle Rectangle = form.getFieldPositions(name).get(0).position;
                        float x = Rectangle.getLeft();
                        float y = Rectangle.getBottom();
                        float width = Rectangle.getWidth();
                        float height = Rectangle.getHeight();
                        // 读图片
                        com.itextpdf.text.Image image = com.itextpdf.text.Image.getInstance(imgpath);
                        // 获取操作的页面
                        PdfContentByte pdfContentByte = stamper.getOverContent(pageNo);
                        // 根据域的大小缩放图片
                        image.scaleToFit(width, height);
                        // 添加图片
                        image.setAbsolutePosition(x, y);
                        pdfContentByte.addImage(image);
                    }
                }
                stamper.setFormFlattening(true);
                stamper.close();
                com.itextpdf.text.Document doc=new com.itextpdf.text.Document();
               PdfWriter pdfWriter = PdfWriter.getInstance(doc,bos);
                // 设置用户密码, 所有者密码,用户权限,所有者权限
                pdfWriter.setEncryption("123456".getBytes(), "123456".getBytes(),  PdfWriter.ALLOW_COPY, PdfWriter.ENCRYPTION_AES_128);
    
                PdfCopy copy=new PdfCopy(doc,out);
                doc.open();
                for (Integer i=1;i<=7;i++){
                    importedPage=copy.getImportedPage(new PdfReader(bos.toByteArray()),i);
                    copy.addPage(importedPage);
                }
                doc.close();
                flag=true;
            }catch (Exception e){
                e.printStackTrace();
                msg=e.getLocalizedMessage();
            }
            resultMap.put("flag",flag);
            resultMap.put("message",msg);
            return resultMap;
        }
        public static String convertStreamToString(InputStream is){
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            StringBuilder sb = new StringBuilder();
            String line = null;
            try {
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "
    ");
                }
            } catch (IOException e) {
                System.out.println("Error=" + e.toString());
            } finally {
                try {
                    is.close();
                } catch (IOException e) {
                    System.out.println("Error=" + e.toString());
                }
            }
            return sb.toString();
        }
    
        public static void getQrCodeImg(String content, String imgPath) {
            int width = 80;// 图片宽
            int height =80;// 图片高
            Qrcode qrcode = new Qrcode();// 实例化一个qrcode对象
            qrcode.setQrcodeErrorCorrect('M');// 设置纠错级别(级别有:L(7%) M(15%) Q(25%) H(30%) )
            qrcode.setQrcodeEncodeMode('B');// 设置编码方式
            qrcode.setQrcodeVersion(7);// 设置二维码版本(版本有 1-40个,)
            BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 开始绘制图片start      1.设置图片大小(BufferedImage.TYPE_INT_RGB:利用三原色绘制二维码)
            Graphics2D gs = img.createGraphics();// 获取绘图工具start
            gs.setBackground(Color.WHITE);// 设置背景为白色
            gs.clearRect(0, 0, width, height);// 设置一个矩形(四个参数分别为:开始绘图的x坐标,y坐标,图片宽,图片高)
            gs.setColor(Color.black);// 设置二维码图片的颜色
            byte[] bt = null;
            try {
                bt = content.getBytes("UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            int py = 2;// 偏移量
            boolean[][] code = qrcode.calQrcode(bt);// 开始准备画图
            for (int i = 0; i < code.length; i++) {
                for (int j = 0; j < code.length; j++) {
                    if (code[j][i]) {
                        gs.fillRect(j * 3 + py, i * 3 + py, 3, 3);// 四个参数(画图的起始x和y位置,每个小模块的宽和高(二维码是有一个一个的小模块构成的));
                    }
                }
            }
            try {
                ImageIO.write(img, "png", new File(imgPath));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                System.out.println("二维码异常。。。。。");
                e.printStackTrace();
            }
        }
    
        public void DeleteFile(String pathPng1,String pathPng2){
            File file1 = new File(pathPng1);
            File file2 = new File(pathPng2);
            if(file1.exists()){
                file1.delete();
            }
            if(file2.exists()){
                file2.delete();
            }
        }
    }
    package com.titifootball.presentation.web.controller;

    import com.alibaba.fastjson.JSONObject;
    import com.aliyun.oss.OSSClient;
    import com.itextpdf.text.pdf.*;
    import com.swetake.util.Qrcode;
    import com.titifootball.common.base.BaseController;
    import com.titifootball.presentation.common.constant.PresentationConstants;
    import com.titifootball.presentation.dao.model.*;
    import com.titifootball.presentation.rpc.api.UresultAttributeService;
    import com.titifootball.presentation.rpc.api.UresultPresentationService;
    import com.titifootball.presentation.rpc.api.UresultTypeService;
    import io.swagger.annotations.ApiOperation;
    import org.apache.batik.transcoder.TranscoderException;
    import org.apache.batik.transcoder.TranscoderInput;
    import org.apache.batik.transcoder.TranscoderOutput;
    import org.apache.batik.transcoder.image.JPEGTranscoder;
    import org.apache.http.HttpEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;

    import javax.imageio.ImageIO;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.*;
    import java.net.MalformedURLException;
    import java.net.URI;
    import java.net.URL;
    import java.text.SimpleDateFormat;
    import java.util.*;
    import java.util.List;


    /**
    * PdfExportController
    * @author jianhun
    * @date 2018/08/29
    */

    @Controller
    @RequestMapping("/manage/pdf/v1")
    public class PlayerReportExportController extends BaseController {
    private final String TEAM_PLAYER_URL="http://localhost:6664/api/v1/upms/team/player/list?teamIds=*";
    private final String PLAYER_URL="http://localhost:6664/api/v1/upms/player/list?playerIds=*";
    private static final Logger LOGGER = LoggerFactory.getLogger(PlayerReportExportController.class);

    @Autowired
    private UresultPresentationService uresultPresentationService;
    @Autowired
    private UresultAttributeService uresultAttributeService;

    @Autowired
    private UresultTypeService uresultTypeService;

    @Autowired
    HttpServletRequest request;

    String SvgPngPath = "";
    String Path = "";

    @RequestMapping(value = "/index", method = RequestMethod.GET)
    public String index() {


    return "/manage/PDF/index.jsp";
    }
    @ApiOperation(value = "SvgPng")
    @RequestMapping(value = "/svgPng", method = RequestMethod.POST)
    @ResponseBody
    public Map svgPng(@RequestParam(value = "svg") String svg) throws Exception {
    Map resultMap=new HashMap();
    Boolean flag=false;
    String msg="";
    flag=true;
    resultMap.put("flag",flag);
    resultMap.put("message",msg);
    SvgPng(svg);
    return resultMap;
    }


    public void SvgPng(String svg) throws Exception {
    String pathSvg = request.getSession().getServletContext().getRealPath( "/")+"\pdf\"+"img\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+"Radar"+ ".svg";
    String pathPng = request.getSession().getServletContext().getRealPath( "/")+"\pdf\"+"img\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+"Radar"+ ".png";
    FileWriter fw = null;
    File f = new File(pathSvg);
    try {
    if (!f.exists()) {
    f.createNewFile();
    }
    fw = new FileWriter(f);
    BufferedWriter out = new BufferedWriter(fw);
    out.write(svg, 0, svg.length());
    out.close();

    } catch (IOException e) {
    e.printStackTrace();
    }
    changeSvgToJpg(pathPng, pathSvg);
    }
    private void changeSvgToJpg(String pistrPngFile, String pistrSvgPath) {
    Date date = new Date();
    long timeBegin = date.getTime();
    String strSvgURI;// svg文件路径
    OutputStream ostream = null;
    File fileSvg = null;
    try {
    fileSvg = new File(pistrSvgPath);
    URI uri = fileSvg.toURI();// 构造一个表示此抽象路径名的 file:URI
    URL url = uri.toURL();// 根据此 URI 构造一个 URL
    strSvgURI = url.toString();
    TranscoderInput input = new TranscoderInput(strSvgURI);// 定义一个通用的转码器的输入

    ostream = new FileOutputStream(pistrPngFile);
    TranscoderOutput output = new TranscoderOutput(ostream);// 定义单路输出的转码器
    JPEGTranscoder transcoder = new JPEGTranscoder();// 构造一个新的转码器,产生JPEG图像
    transcoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(0.8));// 设置一个转码过程,JPEGTranscoder.KEY_QUALITY设置输出png的画质精度,0-1之间
    transcoder.transcode(input, output);// 转换svg文件为png
    } catch (MalformedURLException e) {
    e.printStackTrace();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (TranscoderException e) {
    e.printStackTrace();
    } finally {
    try {
    ostream.flush();
    ostream.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    request.getSession().setAttribute("png",pistrPngFile);

    fileSvg.delete();// 删除svg文件

    }

    @RequestMapping(value = "/exportPdf", method = RequestMethod.GET)
    @ResponseBody
    public Map exportPdf(@RequestParam(value = "assessPlayerId") Long assessPlayerId, HttpServletRequest request) throws Exception {
    Map resultMap=new HashMap();
    Boolean flag=false;
    String msg="";
    Map<String, String> reportData = new HashMap<>(16);
    Long teamId=0L;
    Long playerId=0L;
    try {
    HttpGet requestTeamPlayer = new HttpGet(TEAM_PLAYER_URL.replace("*",assessPlayerId.toString()));
    CloseableHttpResponse response = null;
    CloseableHttpClient httpClient = HttpClientBuilder.create().build();
    response = httpClient.execute(requestTeamPlayer);//执行HttpGet请求
    HttpEntity httpEntity = response.getEntity();//获得实体
    if (httpEntity != null) {
    InputStream instreams = httpEntity.getContent();
    JSONObject jsonObject=JSONObject.parseObject(convertStreamToString(instreams));
    if(jsonObject.getInteger("code")==1){
    teamId=jsonObject.getJSONArray("data").getJSONObject(0).getLong("teamId");
    playerId=jsonObject.getJSONArray("data").getJSONObject(0).getLong("playerId");
    }
    }



    String basePath = request.getSession().getServletContext().getRealPath( "/")+"\pdf\";
    String basePathImg = request.getSession().getServletContext().getRealPath( "/")+"\pdf\"+"img\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+ ".png";
    HttpSession session= ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getSession();
    getQrCodeImg("titifootball.com",basePathImg);
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    String time = sdf.format(date);

    reportData.put("reportDate",time);
    reportData.put("reportDate1",time);
    reportData.put("reportDate2",time);
    reportData.put("reportDate3",time);
    reportData.put("reportDate4",time);
    reportData.put("reportDate5",time);
    reportData.put("qrcode",basePathImg);
    reportData.put("qrcode2",basePathImg);
    reportData.put("qrcode3",basePathImg);
    reportData.put("qrcode4",basePathImg);
    reportData.put("qrcode5",basePathImg);
    reportData.put("qrcode6",basePathImg);
    reportData.put("PI15","D:\A.jpeg");
    reportData.put("Radarchart",(String) session.getAttribute("png"));
    System.out.println(reportData);
    List<Long> uresultTypeIdList = new ArrayList<>();
    UresultTypeExample uresultTypeExample = new UresultTypeExample();
    uresultTypeExample.createCriteria()
    .andIsDeletedEqualTo(PresentationConstants.NO);
    uresultTypeExample.setOrderByClause("id desc");
    List<UresultType> uresultTypeList = uresultTypeService.selectByExample(uresultTypeExample);
    if(null != uresultTypeList && uresultTypeList.size() > 0) {
    for(UresultType uresultType : uresultTypeList) {
    uresultTypeIdList.add(uresultType.getId());
    }
    UresultPresentationExample uresultPresentationExample = new UresultPresentationExample();
    uresultPresentationExample.createCriteria()
    .andIsDeletedEqualTo(PresentationConstants.NO)
    .andAssessmentIdEqualTo(1L)
    .andAssessPlayerIdEqualTo(assessPlayerId)
    .andTypeIn(uresultTypeIdList)
    .andStateEqualTo(PresentationConstants.YES);
    uresultPresentationExample.setOrderByClause("id asc");
    List<UresultPresentationDetail> uresultPresentationDetailList =
    uresultPresentationService.selectUresultPresentationDetailByExampleForOffsetPage(
    uresultPresentationExample, 0, 10000);
    for(UresultPresentationDetail uresultPresentationDetail : uresultPresentationDetailList) {
    UresultAttribute uresultAttribute=uresultPresentationDetail.getUresultAttribute();
    if(null!=uresultAttribute){
    String key = uresultPresentationDetail.getUresultAttribute().getCode();
    String value = uresultPresentationDetail.getAttrValue();
    if (null!=value){
    value+=" "+(null!=uresultPresentationDetail.getUresultAttribute().getUnit()?uresultPresentationDetail.getUresultAttribute().getUnit():"");
    }
    reportData.put(key, value);
    }
    }
    }
    String Name = "1";
    String identification = "2";

    for (String key : reportData.keySet()) {
    Path = reportData.get("qrcode");
    SvgPngPath = reportData.get("Radarchart");
    Name = reportData.get("PI06");
    identification = reportData.get("PI12");
    }
    String newPdfName= /*Name+"-"+identification+*/"1.pdf";
    reportData=generalPdf(basePath+"template/pdf-template.pdf",basePath+"data/"+newPdfName,reportData);

    OSSClient client = new OSSClient(com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ENDPOINT, com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ACCESSKEYID, com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ACCESSKEYSECRET);
    String fileUrl="http://"+ com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_BUCKNAME+"."+ com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ENDPOINT+"/user-report/"+newPdfName;
    client.putObject(com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_BUCKNAME, "user-report/"+newPdfName, new File(basePath+"data/"+newPdfName));
    client.shutdown();
    File pdfFile=new File(basePath+"data/"+newPdfName);
    if (pdfFile.exists()){
    pdfFile.deleteOnExit();
    }
    reportData.put("url",fileUrl);
    DeleteFile(SvgPngPath,Path);
    return reportData;
    }catch (Exception e){
    e.printStackTrace();
    msg=e.getLocalizedMessage();
    }
    resultMap.put("flag",flag);
    resultMap.put("message",msg);
    return resultMap;
    }
    public Map generalPdf(String templatePath,String newPdfPath,Map reportData){
    Map resultMap=new HashMap();
    Boolean flag=false;
    String msg="";
    PdfReader reader;
    FileOutputStream out;
    ByteArrayOutputStream bos;
    PdfStamper stamper;
    PdfImportedPage importedPage;
    try {
    out=new FileOutputStream(newPdfPath);
    reader=new PdfReader(templatePath);
    bos=new ByteArrayOutputStream();
    stamper=new PdfStamper(reader,bos);
    AcroFields form=stamper.getAcroFields();
    Iterator<String> iterator=form.getFields().keySet().iterator();

    while (iterator.hasNext()){
    String name=iterator.next().toString();
    String value=(!reportData.containsKey(name))?"-":reportData.get(name).toString();
    System.out.println(name+"<------->"+value);
    form.setField(name,value);
    if(("PI15".equals(name)) || ("Radarchart".equals(name))||("qrcode".equals(name)) || ("qrcode2".equals(name)) ||("qrcode3".equals(name)) || ("qrcode4".equals(name)) || ("qrcode5".equals(name)) || ("qrcode6".equals(name))){
    String imgpath = reportData.get(name).toString();
    System.out.println(form.getFieldPositions(name));
    int pageNo = form.getFieldPositions(name).get(0).page;
    System.out.println(pageNo);
    com.itextpdf.text.Rectangle Rectangle = form.getFieldPositions(name).get(0).position;
    float x = Rectangle.getLeft();
    float y = Rectangle.getBottom();
    float width = Rectangle.getWidth();
    float height = Rectangle.getHeight();
    // 读图片
    com.itextpdf.text.Image image = com.itextpdf.text.Image.getInstance(imgpath);
    // 获取操作的页面
    PdfContentByte pdfContentByte = stamper.getOverContent(pageNo);
    // 根据域的大小缩放图片
    image.scaleToFit(width, height);
    // 添加图片
    image.setAbsolutePosition(x, y);
    pdfContentByte.addImage(image);
    }
    }
    stamper.setFormFlattening(true);
    stamper.close();
    com.itextpdf.text.Document doc=new com.itextpdf.text.Document();
    /* PdfWriter pdfWriter = PdfWriter.getInstance(doc,bos);
    // 设置用户密码, 所有者密码,用户权限,所有者权限
    pdfWriter.setEncryption("123456".getBytes(), "123456".getBytes(), PdfWriter.ALLOW_COPY, PdfWriter.ENCRYPTION_AES_128);*/

    PdfCopy copy=new PdfCopy(doc,out);
    doc.open();
    for (Integer i=1;i<=7;i++){
    importedPage=copy.getImportedPage(new PdfReader(bos.toByteArray()),i);
    copy.addPage(importedPage);
    }
    doc.close();
    flag=true;
    }catch (Exception e){
    e.printStackTrace();
    msg=e.getLocalizedMessage();
    }
    resultMap.put("flag",flag);
    resultMap.put("message",msg);
    return resultMap;
    }
    public static String convertStreamToString(InputStream is){
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();
    String line = null;
    try {
    while ((line = reader.readLine()) != null) {
    sb.append(line + " ");
    }
    } catch (IOException e) {
    System.out.println("Error=" + e.toString());
    } finally {
    try {
    is.close();
    } catch (IOException e) {
    System.out.println("Error=" + e.toString());
    }
    }
    return sb.toString();
    }

    public static void getQrCodeImg(String content, String imgPath) {
    int width = 80;// 图片宽
    int height =80;// 图片高
    Qrcode qrcode = new Qrcode();// 实例化一个qrcode对象
    qrcode.setQrcodeErrorCorrect('M');// 设置纠错级别(级别有:L(7%) M(15%) Q(25%) H(30%)
    qrcode.setQrcodeEncodeMode('B');// 设置编码方式
    qrcode.setQrcodeVersion(7);// 设置二维码版本(版本有 1-40个,)
    BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 开始绘制图片start 1.设置图片大小(BufferedImage.TYPE_INT_RGB:利用三原色绘制二维码)
    Graphics2D gs = img.createGraphics();// 获取绘图工具start
    gs.setBackground(Color.WHITE);// 设置背景为白色
    gs.clearRect(0, 0, width, height);// 设置一个矩形(四个参数分别为:开始绘图的x坐标,y坐标,图片宽,图片高)
    gs.setColor(Color.black);// 设置二维码图片的颜色
    byte[] bt = null;
    try {
    bt = content.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    int py = 2;// 偏移量
    boolean[][] code = qrcode.calQrcode(bt);// 开始准备画图
    for (int i = 0; i < code.length; i++) {
    for (int j = 0; j < code.length; j++) {
    if (code[j][i]) {
    gs.fillRect(j * 3 + py, i * 3 + py, 3, 3);// 四个参数(画图的起始xy位置,每个小模块的宽和高(二维码是有一个一个的小模块构成的));
    }
    }
    }
    try {
    ImageIO.write(img, "png", new File(imgPath));
    } catch (IOException e) {
    // TODO Auto-generated catch block
    System.out.println("二维码异常。。。。。");
    e.printStackTrace();
    }
    }

    public void DeleteFile(String pathPng1,String pathPng2){
    File file1 = new File(pathPng1);
    File file2 = new File(pathPng2);
    if(file1.exists()){
    file1.delete();
    }
    if(file2.exists()){
    file2.delete();
    }
    }
    }
  • 相关阅读:
    Linux-1-用户管理
    接口相关资料整理
    JPype1使用总结
    1.django项目的创建(在CMD中)
    公有云、私有云和混合云的区别
    接口测试1.测试用例要点与模板
    PostMan Test 的脚本scripts编写方法
    Tensorflow RNN中的坑
    2019年终总结
    tensorflow中一种融合多个模型的方法
  • 原文地址:https://www.cnblogs.com/lijianli/p/9712292.html
Copyright © 2011-2022 走看看