美文网首页
PDF Tester Demo

PDF Tester Demo

作者: e43ef8a56980 | 来源:发表于2019-08-07 16:43 被阅读0次

Java PDF Tester Demo

PDF Tester and Gson usage demo

package zztj.ecs.img;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.stream.JsonReader;
import com.newCompany.hippo.core.junit.HippoJunitTest;
import com.newCompany.iobs.sdk.repkg.com.google.gson.reflect.TypeToken;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.beetl.core.resource.ClasspathResourceLoader;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import zztj.ecs.entirety.evaluate.bean.EcsAnswerScoreT;
import zztj.ecs.entirety.evaluate.bean.vo.*;
import zztj.ecs.entirety.evaluate.service.EcsAnswerUserReportService;
import zztj.ecs.entirety.evaluate.service.EcsAnswerUserReportServiceImpl;
import zztj.ecs.exam.common.constant.ExamConstant;
import zztj.ecs.exam.common.constant.ExamStatusConstant;
import zztj.ecs.exam.common.util.AESEncryptor;
import zztj.ecs.exam.common.util.UUIDHexGenerator;
import zztj.ecs.exam.common.util.UrlToBase64Util;
import zztj.ecs.exam.core.bean.EcsExamT;
import zztj.ecs.proxy.tale.query.TalebaseTQuery;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.math.BigDecimal;
import java.util.*;
import java.util.List;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import org.beetl.core.Configuration;
import org.beetl.core.GroupTemplate;
import org.beetl.core.Template;
import org.beetl.core.resource.ClasspathResourceLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.xhtmlrenderer.pdf.ITextRenderer;

import com.alibaba.fastjson.JSON;
import com.google.common.collect.ImmutableMap;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;

import zztj.ecs.core.api.report.bean.ReportDetail;
import zztj.ecs.core.api.report.bean.ReportExportFile;
import zztj.ecs.core.api.report.bean.ResponseReport;
import zztj.ecs.exam.common.constant.BaseScoreLineConstant;
import zztj.ecs.exam.common.constant.CuteReportStatusConstant;
import zztj.ecs.exam.common.constant.ThreeSixZoreConstant;
import zztj.ecs.exam.core.bean.EcsExamT;
import zztj.ecs.exam.core.service.EcsExamDetailTService;
import zztj.ecs.exam.core.service.EcsExamTService;

public class PDFTester {
    private static final Logger logger = LoggerFactory.getLogger(PDFTester.class);
    private static GroupTemplate gt;

    public static void main(String args[]) throws Exception {

        String jsonString = "{\"examId\":\"4FC39543306749DF9B2CF0256C402FCF\",\"version\":\"4\",\"userList\":[{\"roleId\":\"1\",\"roleName\":\"被评估对象\",\"answerUserId\":\"5B1A4C7E330740BCB70617012C4AEC7A\",\"userUm\":\"XIELIYING001\",\"userName\":\"谢立英\"},{\"roleId\":\"3\",\"roleName\":\"上级\",\"answerUserId\":\"F96706DC7C9241BA80806227F3DD0F14\",\"userUm\":\"YINWENJUN001\",\"userName\":\"尹文军\"},{\"roleId\":\"4\",\"roleName\":\"平级\",\"answerUserId\":\"A2B8C5D798694903AF59FBB710802CFC\",\"userUm\":\"SONGJING01\",\"userName\":\"宋菁\"}],\"percentageList\":[{\"roleId\":\"3\",\"roleName\":\"上级\",\"percentage\":70},{\"roleId\":\"4\",\"roleName\":\"平级\",\"percentage\":30}]}";
        AnswerUserReportVO vo = new Gson().fromJson(jsonString, new TypeToken<AnswerUserReportVO>() {
        }.getType());
        System.err.println("vo = " + vo);
//        generateLineChartImg();
    }

    private static void PDFGene() throws IOException {
        ClasspathResourceLoader classLoader = new ClasspathResourceLoader();
        Configuration cfg = Configuration.defaultConfiguration();
        gt = new GroupTemplate(classLoader, cfg);
        logger.info("create360PDF start");
        long startTime = System.currentTimeMillis();
        ReportExportFile exportFile = new ReportExportFile();
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        Template t = null;
        t = gt.getTemplate("/template/report360PDF2.html");
        String fileName = "D:\\jsonString.txt";
        JsonReader reader = new JsonReader(new FileReader(fileName));
        HashMap<String, Object> data = new Gson().fromJson(reader, new TypeToken<HashMap<String, Object>>() {
        }.getType());
        t.binding(ImmutableMap.of("responseReport", data));
        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocumentFromString(t.render());
        renderer.layout();
        try {
            renderer.createPDF(byteArrayOutputStream);
        } catch (DocumentException e) {

        }
        gt.close();
    }

    private static void generateLineChartImg() throws IOException {
        String fileName = "D:\\jsonString.txt";
        JsonReader reader = new JsonReader(new FileReader(fileName));
        ArrayList<EcsAnswerScoreT> scoreTList = new Gson().fromJson(reader, new TypeToken<ArrayList<EcsAnswerScoreT>>() {
        }.getType());
        File imageF = new File("D:\\cutpng\\tagcpgs.png");
        logger.info("获取报告json:{}", "a");
        BufferedImage image = ImageIO.read(imageF);
        logger.info("imageF:{},{}", image.getWidth(), image.getHeight());//2530 3580
        int w = image.getWidth();
        int h = image.getHeight();
        Graphics2D g = image.createGraphics();
        int baseImageX = 153;
        int baseImageY = 289;
        int xd = 23;//除以2是因为有0.5,所以x轴间距减半
        int yd = 69;
        int r = 6;
        Float width = 3F;
        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        g.setFont(new Font("微软雅黑", Font.PLAIN, 40));
        g.setStroke(new BasicStroke(width));
        g.setColor(Color.BLACK);
        Color color = Color.RED;
        for (int i = 0; i < scoreTList.size(); i++) {
            g.setColor(color);
            int xdTimesNext = 0;
            String score = scoreTList.get(i).getScore();
            int xdTimes = 20 - (int) (Double.parseDouble(score) * 2);
            if (i < scoreTList.size() - 1) {
                String scoreNext = scoreTList.get(i + 1).getScore();
                System.err.println("score = " + score + ", \"scoreNext\": " + scoreNext);
                xdTimesNext = 20 - (int) (Double.parseDouble(scoreNext) * 2);
            }
            int upLimit = 0;
            if (i >= 0 && i < 8) {// group 1
                drawGroupDogLegLine(g, baseImageX, baseImageY, xd, yd, r, color, i, xdTimesNext, xdTimes, upLimit);
            }
            if (i >= 8 && i < 16) {// group 2
                upLimit = 8;
                baseImageX = 840;
                drawGroupDogLegLine(g, baseImageX, baseImageY, xd, yd, r, color, i, xdTimesNext, xdTimes, upLimit);
            } else if (i >= 16) {// group 3
                upLimit = 16;
                baseImageX = 1521;
                drawGroupDogLegLine(g, baseImageX, baseImageY, xd, yd, r, color, i, xdTimesNext, xdTimes, upLimit);
            }
        }
        logger.info("xd:{}, yd:{}", xd, yd);
        g.dispose();
        File outPUtFile = new File("D:\\testImg.png");
        ImageIO.write(image, "png", outPUtFile);
    }

    private static void drawGroupDogLegLine(Graphics2D g, int baseImageX, int baseImageY, int xd, int yd, int r, Color color, int i, int xdTimesNext, int xdTimes, int upLimit) {
        int j = i - upLimit;
        int x1 = baseImageX + xd * xdTimes;
        int y1 = baseImageY + yd * (j);
        int x2 = baseImageX + xd * xdTimesNext;
        int y2 = baseImageY + yd * (j + 1);
        if (j < 7) {
            g.drawLine(x1, y1, x2, y2);
        }
        //先画白底圆心
        g.setColor(Color.white);
        g.fillOval(x1 - r, y1 - r, 2 * r, 2 * r);
        //再画圆框
        g.setColor(color);
        g.drawOval(x1 - r, y1 - r, 2 * r, 2 * r);
    }

    private static void GsonDemo() throws IOException {
        List<EcsExamT> list = new ArrayList<>();
        EcsExamT ecsExamT = new EcsExamT();
        ecsExamT.setId(UUIDHexGenerator.getUUID());
        ecsExamT.setUserName("托尔斯泰");
        ecsExamT.setUserId("dfadsfd");
        ecsExamT.setDeptId("test");
        ecsExamT.setAppId(ExamConstant.SYSTEM_APP_ID);
        list.add(ecsExamT);

        String fileName = jsonStringToFile(list);
        JsonReader reader = new JsonReader(new FileReader(fileName));
        ArrayList<EcsExamT> list2 = new Gson().fromJson(reader, new TypeToken<ArrayList<EcsExamT>>() {
        }.getType());
        System.err.println("list2 = " + list2);
    }

    private static String jsonStringToFile(List<EcsExamT> list) throws IOException {
        String fileName = "D:\\jsonString2.txt";
        FileWriter writer = new FileWriter(fileName);
        Gson gson = new GsonBuilder().create();
        gson.toJson(list, writer);
        writer.close();
        return fileName;
    }

    @Autowired
    private EcsAnswerUserReportService ecsAnswerUserReportService;

    @Test
    public void drawCodeBaseTeaser() throws Exception {
        String version = "4";
        String jsonString = "{\"examId\":\"FEA72C94DF034BB186E060E9C4D0298A\",\"version\":\"4\",\"userList\":[{\"roleId\":\"1\",\"roleName\":\"被评估对象\",\"answerUserId\":\"CB319FF9D83B4D6993259DC8AC11E5E3\",\"userUm\":\"CHENPENGYU001\",\"userName\":\"陈鹏宇\"},{\"roleId\":\"2\",\"roleName\":\"执行官\",\"answerUserId\":\"42693EDEFF0E49899964BA2837A033E1\",\"userUm\":\"NIUXIUYING001\",\"userName\":\"牛秀英\"},{\"roleId\":\"2\",\"roleName\":\"执行官\",\"answerUserId\":\"B0CA42C9C8D9479C8DE5344C04E883ED\",\"userUm\":\"ZENGQINGBING001\",\"userName\":\"曾庆兵\"},{\"roleId\":\"3\",\"roleName\":\"上级\",\"answerUserId\":\"8C305145914A4A7A8C49689AEA8AD7FF\",\"userUm\":\"WANYAO001\",\"userName\":\"万瑶\"},{\"roleId\":\"3\",\"roleName\":\"上级\",\"answerUserId\":\"42DD9B8C5C514B85BD805451AFE02388\",\"userUm\":\"YANGWANJUN001\",\"userName\":\"杨万平\"},{\"roleId\":\"9\",\"roleName\":\"人事\",\"answerUserId\":\"8FBF8127014A4F88AA3715DB7C6476B8\",\"userUm\":\"ZHANGKAI021\",\"userName\":\"张凯\"},{\"roleId\":\"4\",\"roleName\":\"平级\",\"answerUserId\":\"B94517D5D4264590A9175A290B7DEF79\",\"userUm\":\"MANING012\",\"userName\":\"马宁\"}],\"percentageList\":[{\"roleId\":\"2\",\"roleName\":\"执行官\",\"percentage\":35},{\"roleId\":\"3\",\"roleName\":\"上级\",\"percentage\":35},{\"roleId\":\"9\",\"roleName\":\"人事\",\"percentage\":0},{\"roleId\":\"4\",\"roleName\":\"平级\",\"percentage\":30}]}";
        AnswerUserReportVO vo = new Gson().fromJson(jsonString, new TypeToken<AnswerUserReportVO>() {
        }.getType());
        String examId = "FEA72C94DF034BB186E060E9C4D0298A";
        ReportDownload reportDownload = ecsAnswerUserReportService.generateReportAndUpload(examId, vo, version);
        System.err.println("reportDownload = " + reportDownload);
    }

    public static void drawCodeBase() throws IOException {
        EcsAnswerUserReportServiceImpl ecsAnswerUserReportService = new EcsAnswerUserReportServiceImpl();
        List<Map<String, List<EcsAnswerScoreT>>> listMap = new ArrayList<>();
        HashMap<String, List<EcsAnswerScoreT>> stringListHashMap = new HashMap<>();
        listMap.add(stringListHashMap);
        byte[] bytes = ecsAnswerUserReportService.drawPdfCpgs(listMap);
    }


    public static String multiPercentRound(String score, int percent) {
        if (StringUtils.isBlank(score)) {
            return "0";
        }
        BigDecimal bgScore = new BigDecimal(score);
        BigDecimal bgPercent = new BigDecimal(percent);
        bgScore = bgScore.multiply(bgPercent).divide(new BigDecimal(100)).setScale(1, BigDecimal.ROUND_HALF_UP);
        return bgScore.toString();
    }

    public static void draw() {
        String username = "Xt0SEnB0tZ2SC6clzgQ+ZA==";
        String password = "WmYJgCX3KZlK4/9OQ+epgw==";
        List<String> list = new ArrayList<>();
        TalebaseTQuery talebaseTQuery = new TalebaseTQuery();
        list.add(username);
        list.add(password);
        username = AESEncryptor.decode(username, "1qwas#@14reWQAS%", "67fjkf@#$SDdsKIo");
        password = AESEncryptor.decode(password, "1qwas#@14reWQAS%", "67fjkf@#$SDdsKIo");
        System.out.println(username);
        System.out.println(password);
        logger.info("获取报告json:{}", "a");
        try {
            long start = System.currentTimeMillis();
            File imageF = new File("D:\\cutpng\\cpgs.png");
            File imageBla = new File("D:\\cutpng\\bla.png");
            File imageYel = new File("D:\\cutpng\\yel.png");
            logger.info("获取报告json:{}", "a");
            BufferedImage image = ImageIO.read(imageF);
            BufferedImage bla = ImageIO.read(imageBla);
            BufferedImage yel = ImageIO.read(imageYel);
            logger.info("imageF:{},{}", image.getWidth(), image.getHeight());//2530 3580
            int w = image.getWidth();
            int h = image.getHeight();
            Graphics2D g = image.createGraphics();

            int xnum = 11;
            int ynum = 24;
            int xd = 150;
            int yd = 123;
            int r = 9;
            Float width = 4.5F;
            int x = 579;
            int y = 562;
            //设置文字抗锯齿
            g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
            g.setFont(new Font("微软雅黑", Font.PLAIN, 40));
            g.setStroke(new BasicStroke(width));
            g.setColor(Color.BLACK);

            //设置画图抗锯齿
            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            for (int j = 0; j < 24; j++) {
                g.setColor(new Color(227, 108, 12));
                if (j < 23) {
                    int x1 = x + xd * (j % xnum);
                    int y1 = y + yd * j;
                    int x2 = x + xd * ((j + 1) % xnum);
                    int y2 = y + yd * (j + 1);
                    System.err.println("x1 = " + x1 + ", \"y1\": " + y1 + ", \"x2\": " + x2 + ", \"y2\": " + y2);
                    g.drawLine(x1, y1, x2, y2);
                }
                //先画圆心
//                g.setColor(Color.green);
//                g.fillOval(x+xd*(j%xnum)-r,y+yd*j-r,2*r,2*r);
//                //再画圆框
//                g.setColor(new Color(227,108,12));
//                g.drawOval(x+xd*(j%xnum)-r,y+yd*j-r,2*r,2*r);
            }
            logger.info("xd:{}, yd:{}", xd, yd);
            g.dispose();
            File outPUtFile = new File("D:\\testImg.png");
            ImageIO.write(image, "png", outPUtFile);


//            GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
//            String[] fontName = e.getAvailableFontFamilyNames();
//            for (int i = 0; i < fontName.length; i++) {
//                System.out.println(fontName[i]);
//            }

            long end = System.currentTimeMillis();
            logger.info("costs{}ms", (end - start));
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

        System.out.println(multiPercentRound("100.01", 60));
    }


    public static void testFile() {
        File file = new File("D:\\test.xlsx");
        if (file.canExecute()) {
            logger.info("1");
        }
        if (file.canWrite()) {
            logger.info("2");
        }
    }

    public static void download() throws IOException {
        String path = "D:\\test.pdf";
        FileOutputStream fos = new FileOutputStream(new File(path));
        byte[] fileBytes = UrlToBase64Util.getImageFromNetByUrl("http://iobs-lf.example.com/download/zztj-hrx-dmz-prd/2c99722f69e327b1016a00d9f1e60128");
        IOUtils.write(fileBytes, fos);
    }

    public static void TEST(int n) throws IOException {
        List<Integer> list1 = new ArrayList<>();
        for (int i = 0; i <= n; i++) {
            int temp = 2 << i;
            if (temp <= n) {
                list1.add(temp);
            }
        }
    }

    public static void TESTImage() throws IOException {
        File imageF = new File("D:\\mail_logo.jpg");
        FileInputStream fis = new FileInputStream(imageF);
        BufferedImage image = ImageIO.read(imageF);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        int count = -1;
        while ((count = fis.read(buf)) > -1) {
            bos.write(buf, 0, count);
        }
        byte[] fileByte = bos.toByteArray();
        bos.close();
        logger.info("fileByte size is:{}", fileByte.length);
        logger.info("data:image/jpg;base64," + org.apache.commons.codec.binary.Base64.encodeBase64String(fileByte));
    }

    public static void testString() {
        String str = "http://stg.iobs-lf.example.com/download/zztj-hrx-dmz-stg/8a34fff563bed7160163bed716d80000";
        String str2 = "http://vt.example.com/user-center-web/profile/avatar/vzU96a86e0nO2";
        logger.info(str);
        logger.info(str2);
    }

}

Picture process and Data process

// picture data processing
    public static final String base64ImgPre = "data:image/pdf;base64,";
        reportData.put("abilityChart", base64ImgPre + Base64.encodeBase64String(abilityChart));
// normal data processing 
        Map<String, Object> baseInfo = get360ReportBaseInfo(examId);
        reportData.put("baseInfo", baseInfo);

Basically, Picture is stored as byte[] stream, or Data processing

相关文章

网友评论

      本文标题:PDF Tester Demo

      本文链接:https://www.haomeiwen.com/subject/vlcadctx.html