From 0f52a88d7c50ade76b9014d9867ba28f4a4f3d9b Mon Sep 17 00:00:00 2001
From: whb <17803890193@163.com>
Date: Mon, 1 Jul 2024 09:41:18 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=84=9A=E6=89=8B=E6=9E=B6?=
 =?UTF-8?q?=E6=A0=BC=E5=BC=8F=EF=BC=8C=E8=A7=A3=E5=86=B3=E6=89=93=E5=8C=85?=
 =?UTF-8?q?=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../pom.xml                                   |    0
 .../java/util/convertPDF/PDFConvertUtil.java  |    0
 .../resources/lib/aspose-cells-20.7-crack.jar |  Bin
 .../main/resources/lib/aspose-pdf-18.2.jar    |  Bin
 .../lib/aspose-words-18.10-jdk16.jar          |  Bin
 .../digital_credit/config/Constant.java       |    2 +-
 .../StuExportToExcelController.java           |    2 +-
 .../impl/StuConceptBlockServiceImpl.java      |    3 -
 .../sztzjy/digital_credit/util/SealUtil.java  |  142 +--
 .../digital_credit/util/seal/SealCircle.java  |   24 +-
 .../digital_credit/util/seal/SealFont.java    |   74 +-
 .../digital_credit/util/seal/SealUtil.java    | 1104 ++++++++---------
 12 files changed, 674 insertions(+), 677 deletions(-)
 rename {src/main/java/com/sztzjy/admin-convert-pdf => admin-convert-pdf}/pom.xml (100%)
 rename {src/main/java/com/sztzjy/admin-convert-pdf => admin-convert-pdf}/src/main/java/util/convertPDF/PDFConvertUtil.java (100%)
 rename {src/main/java/com/sztzjy/admin-convert-pdf => admin-convert-pdf}/src/main/resources/lib/aspose-cells-20.7-crack.jar (100%)
 rename {src/main/java/com/sztzjy/admin-convert-pdf => admin-convert-pdf}/src/main/resources/lib/aspose-pdf-18.2.jar (100%)
 rename {src/main/java/com/sztzjy/admin-convert-pdf => admin-convert-pdf}/src/main/resources/lib/aspose-words-18.10-jdk16.jar (100%)

diff --git a/src/main/java/com/sztzjy/admin-convert-pdf/pom.xml b/admin-convert-pdf/pom.xml
similarity index 100%
rename from src/main/java/com/sztzjy/admin-convert-pdf/pom.xml
rename to admin-convert-pdf/pom.xml
diff --git a/src/main/java/com/sztzjy/admin-convert-pdf/src/main/java/util/convertPDF/PDFConvertUtil.java b/admin-convert-pdf/src/main/java/util/convertPDF/PDFConvertUtil.java
similarity index 100%
rename from src/main/java/com/sztzjy/admin-convert-pdf/src/main/java/util/convertPDF/PDFConvertUtil.java
rename to admin-convert-pdf/src/main/java/util/convertPDF/PDFConvertUtil.java
diff --git a/src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-cells-20.7-crack.jar b/admin-convert-pdf/src/main/resources/lib/aspose-cells-20.7-crack.jar
similarity index 100%
rename from src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-cells-20.7-crack.jar
rename to admin-convert-pdf/src/main/resources/lib/aspose-cells-20.7-crack.jar
diff --git a/src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-pdf-18.2.jar b/admin-convert-pdf/src/main/resources/lib/aspose-pdf-18.2.jar
similarity index 100%
rename from src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-pdf-18.2.jar
rename to admin-convert-pdf/src/main/resources/lib/aspose-pdf-18.2.jar
diff --git a/src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-words-18.10-jdk16.jar b/admin-convert-pdf/src/main/resources/lib/aspose-words-18.10-jdk16.jar
similarity index 100%
rename from src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-words-18.10-jdk16.jar
rename to admin-convert-pdf/src/main/resources/lib/aspose-words-18.10-jdk16.jar
diff --git a/src/main/java/com/sztzjy/digital_credit/config/Constant.java b/src/main/java/com/sztzjy/digital_credit/config/Constant.java
index 4d27677..d8362bd 100644
--- a/src/main/java/com/sztzjy/digital_credit/config/Constant.java
+++ b/src/main/java/com/sztzjy/digital_credit/config/Constant.java
@@ -1,6 +1,6 @@
 package com.sztzjy.digital_credit.config;
 
-import javafx.scene.text.Text;
+
 import org.springframework.stereotype.Component;
 
 import java.awt.*;
diff --git a/src/main/java/com/sztzjy/digital_credit/controller/StuExportToExcelController.java b/src/main/java/com/sztzjy/digital_credit/controller/StuExportToExcelController.java
index 6ff75af..0f6c314 100644
--- a/src/main/java/com/sztzjy/digital_credit/controller/StuExportToExcelController.java
+++ b/src/main/java/com/sztzjy/digital_credit/controller/StuExportToExcelController.java
@@ -38,7 +38,7 @@ import java.net.URLEncoder;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static jdk.nashorn.internal.runtime.regexp.joni.Config.log;
+
 
 /**
  * @author 17803
diff --git a/src/main/java/com/sztzjy/digital_credit/service/impl/StuConceptBlockServiceImpl.java b/src/main/java/com/sztzjy/digital_credit/service/impl/StuConceptBlockServiceImpl.java
index 681cf35..329b355 100644
--- a/src/main/java/com/sztzjy/digital_credit/service/impl/StuConceptBlockServiceImpl.java
+++ b/src/main/java/com/sztzjy/digital_credit/service/impl/StuConceptBlockServiceImpl.java
@@ -8,11 +8,8 @@ import com.sztzjy.digital_credit.entity.*;
 import com.sztzjy.digital_credit.entity.dto.StuBlockProductWithDTO;
 import com.sztzjy.digital_credit.mapper.*;
 import com.sztzjy.digital_credit.service.StuConceptBlockService;
-import com.sztzjy.digital_credit.util.ConvertUtil;
 import com.sztzjy.digital_credit.util.PdfUtil;
-import com.sztzjy.digital_credit.util.compute.ScoringUtil;
 import com.sztzjy.digital_credit.util.file.IFileUtil;
-import com.sztzjy.digital_credit.util.file.LocalFileUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.mock.web.MockMultipartFile;
diff --git a/src/main/java/com/sztzjy/digital_credit/util/SealUtil.java b/src/main/java/com/sztzjy/digital_credit/util/SealUtil.java
index 232c44f..71782f8 100644
--- a/src/main/java/com/sztzjy/digital_credit/util/SealUtil.java
+++ b/src/main/java/com/sztzjy/digital_credit/util/SealUtil.java
@@ -1,71 +1,71 @@
-package com.sztzjy.digital_credit.util;
-
-import cn.hutool.core.util.IdUtil;
-
-import com.sztzjy.digital_credit.util.file.LocalFileUtil;
-import com.sztzjy.digital_credit.util.seal.SealCircle;
-import com.sztzjy.digital_credit.util.seal.SealFont;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.File;
-
-/**
- * @author 17803
- * @date 2023-12-05 15:11
- */
-
-@Component
-public class SealUtil {
-
-    @Resource
-    LocalFileUtil localFileUtil;
-
-    @Value("${file.path}")
-    private String filePath;
-
-    public  String genertSealB(String name) throws Exception{
-        String file = filePath+"/seal/";
-        // 创建 File 对象
-                File infoFile = new File(file);
-                if (!infoFile.exists()) {
-                    infoFile.mkdir();
-                }
-        String s = IdUtil.fastSimpleUUID();
-        com.sztzjy.digital_credit.util.seal.SealUtil.builder()
-                .size(200)
-                .borderCircle(SealCircle.builder().line(4).width(95).height(95).build())
-                .mainFont(SealFont.builder().text(name+"有限公司").size(22).space(30.0).margin(4).build())
-                .centerFont(SealFont.builder().text("★").size(60).build())
-                .titleFont(SealFont.builder().text("电子签章").size(16).space(8.0).margin(54).build())
-                .build()
-                .draw(filePath+"/seal/"+ s +".png");
-        System.out.println(name+"公章已生成");
-       return s;
-    }
-    public  String genertSealA(String name) throws Exception{
-        String file = "D:/home/"+"seal/";
-        //String file = filePath+"/seal/";
-
-        // 创建 File 对象
-        File infoFile = new File(file);
-        if (!infoFile.exists()) {
-            infoFile.mkdir();
-        }
-        String s = IdUtil.fastSimpleUUID();
-        com.sztzjy.digital_credit.util.seal.SealUtil.builder()
-                .size(200)
-                .borderCircle(SealCircle.builder().line(4).width(95).height(95).build())
-                .mainFont(SealFont.builder().text(name).size(22).space(30.0).margin(4).build())
-                .centerFont(SealFont.builder().text("★").size(60).build())
-                .titleFont(SealFont.builder().text("电子签章").size(16).space(8.0).margin(54).build())
-                .build()
-                .draw(filePath+"/seal/"+ s +".png");
-        System.out.println(name+"公章已生成");
-        return s;
-    }
-
-
-
-}
+//package com.sztzjy.digital_credit.util;
+//
+//import cn.hutool.core.util.IdUtil;
+//
+//import com.sztzjy.digital_credit.util.file.LocalFileUtil;
+//import com.sztzjy.digital_credit.util.seal.SealCircle;
+//import com.sztzjy.digital_credit.util.seal.SealFont;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.stereotype.Component;
+//
+//import javax.annotation.Resource;
+//import java.io.File;
+//
+///**
+// * @author 17803
+// * @date 2023-12-05 15:11
+// */
+//
+//@Component
+//public class SealUtil {
+//
+//    @Resource
+//    LocalFileUtil localFileUtil;
+//
+//    @Value("${file.path}")
+//    private String filePath;
+//
+//    public  String genertSealB(String name) throws Exception{
+//        String file = filePath+"/seal/";
+//        // 创建 File 对象
+//                File infoFile = new File(file);
+//                if (!infoFile.exists()) {
+//                    infoFile.mkdir();
+//                }
+//        String s = IdUtil.fastSimpleUUID();
+//        com.sztzjy.digital_credit.util.seal.SealUtil.builder()
+//                .size(200)
+//                .borderCircle(SealCircle.builder().line(4).width(95).height(95).build())
+//                .mainFont(SealFont.builder().text(name+"有限公司").size(22).space(30.0).margin(4).build())
+//                .centerFont(SealFont.builder().text("★").size(60).build())
+//                .titleFont(SealFont.builder().text("电子签章").size(16).space(8.0).margin(54).build())
+//                .build()
+//                .draw(filePath+"/seal/"+ s +".png");
+//        System.out.println(name+"公章已生成");
+//       return s;
+//    }
+//    public  String genertSealA(String name) throws Exception{
+//        String file = "D:/home/"+"seal/";
+//        //String file = filePath+"/seal/";
+//
+//        // 创建 File 对象
+//        File infoFile = new File(file);
+//        if (!infoFile.exists()) {
+//            infoFile.mkdir();
+//        }
+//        String s = IdUtil.fastSimpleUUID();
+//        com.sztzjy.digital_credit.util.seal.SealUtil.builder()
+//                .size(200)
+//                .borderCircle(SealCircle.builder().line(4).width(95).height(95).build())
+//                .mainFont(SealFont.builder().text(name).size(22).space(30.0).margin(4).build())
+//                .centerFont(SealFont.builder().text("★").size(60).build())
+//                .titleFont(SealFont.builder().text("电子签章").size(16).space(8.0).margin(54).build())
+//                .build()
+//                .draw(filePath+"/seal/"+ s +".png");
+//        System.out.println(name+"公章已生成");
+//        return s;
+//    }
+//
+//
+//
+//}
diff --git a/src/main/java/com/sztzjy/digital_credit/util/seal/SealCircle.java b/src/main/java/com/sztzjy/digital_credit/util/seal/SealCircle.java
index facbe98..e1b02b3 100644
--- a/src/main/java/com/sztzjy/digital_credit/util/seal/SealCircle.java
+++ b/src/main/java/com/sztzjy/digital_credit/util/seal/SealCircle.java
@@ -1,12 +1,12 @@
-package com.sztzjy.digital_credit.util.seal;
-
-
-import lombok.Builder;
-import lombok.Getter;
-@Getter
-@Builder
-public class SealCircle {
-    private Integer line;
-    private Integer width;
-    private Integer height;
-}
+//package com.sztzjy.digital_credit.util.seal;
+//
+//
+//import lombok.Builder;
+//import lombok.Getter;
+//@Getter
+//@Builder
+//public class SealCircle {
+//    private Integer line;
+//    private Integer width;
+//    private Integer height;
+//}
diff --git a/src/main/java/com/sztzjy/digital_credit/util/seal/SealFont.java b/src/main/java/com/sztzjy/digital_credit/util/seal/SealFont.java
index d173e80..3bbaba4 100644
--- a/src/main/java/com/sztzjy/digital_credit/util/seal/SealFont.java
+++ b/src/main/java/com/sztzjy/digital_credit/util/seal/SealFont.java
@@ -1,37 +1,37 @@
-package com.sztzjy.digital_credit.util.seal;/**
- * @author 17803
- * @date 2023-12-05 15:01
- */
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Getter
-@Builder
-public class SealFont {
-
-    private String text;
-
-    private String family;
-
-    private Integer size;
-
-    private Boolean bold;
-
-    private Double space;
-
-    private Integer margin;
-
-    public String getFamily() {
-        return family == null ? "宋体" : family;
-    }
-
-    public boolean getBold() {
-        return bold == null ? true : bold;
-    }
-
-    public SealFont append(String text) {
-        this.text += text;
-        return this;
-    }
-}
+//package com.sztzjy.digital_credit.util.seal;/**
+// * @author 17803
+// * @date 2023-12-05 15:01
+// */
+//
+//import lombok.Builder;
+//import lombok.Getter;
+//
+//@Getter
+//@Builder
+//public class SealFont {
+//
+//    private String text;
+//
+//    private String family;
+//
+//    private Integer size;
+//
+//    private Boolean bold;
+//
+//    private Double space;
+//
+//    private Integer margin;
+//
+//    public String getFamily() {
+//        return family == null ? "宋体" : family;
+//    }
+//
+//    public boolean getBold() {
+//        return bold == null ? true : bold;
+//    }
+//
+//    public SealFont append(String text) {
+//        this.text += text;
+//        return this;
+//    }
+//}
diff --git a/src/main/java/com/sztzjy/digital_credit/util/seal/SealUtil.java b/src/main/java/com/sztzjy/digital_credit/util/seal/SealUtil.java
index 9615152..d845723 100644
--- a/src/main/java/com/sztzjy/digital_credit/util/seal/SealUtil.java
+++ b/src/main/java/com/sztzjy/digital_credit/util/seal/SealUtil.java
@@ -1,552 +1,552 @@
-package com.sztzjy.digital_credit.util.seal;
-
-import lombok.Builder;
-import lombok.Getter;
-
-import javax.imageio.ImageIO;
-import java.awt.*;
-import java.awt.font.FontRenderContext;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.Rectangle2D;
-import java.awt.image.BufferedImage;
-import java.io.File;
-
-/**
- * 二,绘画出不同的电子合同章
- */
-
-@Builder
-@Getter
-public class SealUtil {
-
-    // 起始位置
-    private static final int INIT_BEGIN = 5;
-
-    // 尺寸
-    private Integer size;
-
-    // 颜色
-    private Color color;
-
-    // 主字
-    private SealFont mainFont;
-
-    // 副字
-    private SealFont viceFont;
-
-    // 抬头
-    private SealFont titleFont;
-
-    // 中心字
-    private SealFont centerFont;
-
-    // 边线圆
-    private SealCircle borderCircle;
-
-    // 内边线圆
-    private SealCircle borderInnerCircle;
-
-    // 内线圆
-    private SealCircle innerCircle;
-
-    // 边线框
-    private Integer borderSquare;
-
-    // 加字
-    private String stamp;
-
-    /**
-     * 画公章
-     */
-    public boolean draw(String pngPath) throws Exception {
-        if (borderSquare != null) {
-            return draw2(pngPath); // 画私章
-        }
-
-        //1.画布
-        BufferedImage bi = new BufferedImage(size, size, BufferedImage.TYPE_4BYTE_ABGR);
-
-        //2.画笔
-        Graphics2D g2d = bi.createGraphics();
-
-        //2.1抗锯齿设置
-        //文本不抗锯齿,否则圆中心的文字会被拉长
-        RenderingHints hints = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
-        //其他图形抗锯齿
-        hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-        g2d.setRenderingHints(hints);
-
-        //2.2设置背景透明度
-        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, 0));
-
-        //2.3填充矩形
-        g2d.fillRect(0, 0, size, size);
-
-        //2.4重设透明度,开始画图
-        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, 1));
-
-        //2.5设置画笔颜色
-        g2d.setPaint(color == null ? Color.RED : color);
-
-        //3.画边线圆
-        if (borderCircle != null) {
-            drawCircle(g2d, borderCircle, INIT_BEGIN, INIT_BEGIN);
-        } else {
-            throw new Exception("BorderCircle can not null!");
-        }
-
-        int borderCircleWidth = borderCircle.getWidth();
-        int borderCircleHeight = borderCircle.getHeight();
-
-        //4.画内边线圆
-        if (borderInnerCircle != null) {
-            int x = INIT_BEGIN + borderCircleWidth - borderInnerCircle.getWidth();
-            int y = INIT_BEGIN + borderCircleHeight - borderInnerCircle.getHeight();
-            drawCircle(g2d, borderInnerCircle, x, y);
-        }
-
-        //5.画内环线圆
-        if (innerCircle != null) {
-            int x = INIT_BEGIN + borderCircleWidth - innerCircle.getWidth();
-            int y = INIT_BEGIN + borderCircleHeight - innerCircle.getHeight();
-            drawCircle(g2d, innerCircle, x, y);
-        }
-
-        //6.画弧形主文字
-        if (borderCircleHeight != borderCircleWidth) {
-            drawArcFont4Oval(g2d, borderCircle, mainFont, true);
-        } else {
-            drawArcFont4Circle(g2d, borderCircleHeight, mainFont, true);
-        }
-
-        //7.画弧形副文字
-        if (borderCircleHeight != borderCircleWidth) {
-            drawArcFont4Oval(g2d, borderCircle, viceFont, false);
-        } else {
-            drawArcFont4Circle(g2d, borderCircleHeight, viceFont, false);
-        }
-
-        //8.画中心字
-        drawFont(g2d, (borderCircleWidth + INIT_BEGIN) * 2, (borderCircleHeight + INIT_BEGIN) * 2, centerFont);
-
-        //9.画抬头文字
-        drawFont(g2d, (borderCircleWidth + INIT_BEGIN) * 2, (borderCircleHeight + INIT_BEGIN) * 2, titleFont);
-
-        g2d.dispose();
-
-        return ImageIO.write(bi, "PNG", new File(pngPath));
-    }
-
-    /**
-     * 绘制圆弧形文字
-     */
-    private static void drawArcFont4Circle(Graphics2D g2d, int circleRadius, SealFont font, boolean isTop) {
-        if (font == null) {
-            return;
-        }
-
-        //1.字体长度
-        int textLen = font.getText().length();
-
-        //2.字体大小,默认根据字体长度动态设定
-        int size = font.getSize() == null ? (55 - textLen * 2) : font.getSize();
-
-        //3.字体样式
-        int style = font.getBold() ? Font.BOLD : Font.PLAIN;
-
-        //4.构造字体
-        Font f = new Font(font.getFamily(), style, size);
-
-        FontRenderContext context = g2d.getFontRenderContext();
-        Rectangle2D rectangle = f.getStringBounds(font.getText(), context);
-
-        //5.文字之间间距,默认动态调整
-        double space;
-        if (font.getSpace() != null) {
-            space = font.getSpace();
-        } else {
-            if (textLen == 1) {
-                space = 0;
-            } else {
-                space = rectangle.getWidth() / (textLen - 1) * 0.9;
-            }
-        }
-
-        //6.距离外圈距离
-        int margin = font.getMargin() == null ? INIT_BEGIN : font.getMargin();
-
-        //7.写字
-        double newRadius = circleRadius + rectangle.getY() - margin;
-        double radianPerInterval = 2 * Math.asin(space / (2 * newRadius));
-
-        double fix = 0.04;
-        if (isTop) {
-            fix = 0.18;
-        }
-        double firstAngle;
-        if (!isTop) {
-            if (textLen % 2 == 1) {
-                firstAngle = Math.PI + Math.PI / 2 - (textLen - 1) * radianPerInterval / 2.0 - fix;
-            } else {
-                firstAngle = Math.PI + Math.PI / 2 - ((textLen / 2.0 - 0.5) * radianPerInterval) - fix;
-            }
-        } else {
-            if (textLen % 2 == 1) {
-                firstAngle = (textLen - 1) * radianPerInterval / 2.0 + Math.PI / 2 + fix;
-            } else {
-                firstAngle = (textLen / 2.0 - 0.5) * radianPerInterval + Math.PI / 2 + fix;
-            }
-        }
-
-        for (int i = 0; i < textLen; i++) {
-            double theta;
-            double thetaX;
-            double thetaY;
-
-            if (!isTop) {
-                theta = firstAngle + i * radianPerInterval;
-                thetaX = newRadius * Math.sin(Math.PI / 2 - theta);
-                thetaY = newRadius * Math.cos(theta - Math.PI / 2);
-            } else {
-                theta = firstAngle - i * radianPerInterval;
-                thetaX = newRadius * Math.sin(Math.PI / 2 - theta);
-                thetaY = newRadius * Math.cos(theta - Math.PI / 2);
-            }
-
-            AffineTransform transform;
-            if (!isTop) {
-                transform = AffineTransform.getRotateInstance(Math.PI + Math.PI / 2 - theta);
-            } else {
-                transform = AffineTransform.getRotateInstance(Math.PI / 2 - theta + Math.toRadians(8));
-            }
-            Font f2 = f.deriveFont(transform);
-            g2d.setFont(f2);
-            g2d.drawString(font.getText().substring(i, i + 1), (float) (circleRadius + thetaX + INIT_BEGIN), (float) (circleRadius - thetaY + INIT_BEGIN));
-        }
-    }
-
-    /**
-     * 绘制椭圆弧形文字
-     */
-    private static void drawArcFont4Oval(Graphics2D g2d, SealCircle sealCircle, SealFont font, boolean isTop) {
-        if (font == null) {
-            return;
-        }
-        float radiusX = sealCircle.getWidth();
-        float radiusY = sealCircle.getHeight();
-        float radiusWidth = radiusX + sealCircle.getLine();
-        float radiusHeight = radiusY + sealCircle.getLine();
-
-        //1.字体长度
-        int textLen = font.getText().length();
-
-        //2.字体大小,默认根据字体长度动态设定
-        int size = font.getSize() == null ? 25 + (10 - textLen) / 2 : font.getSize();
-
-        //3.字体样式
-        int style = font.getBold() ? Font.BOLD : Font.PLAIN;
-
-        //4.构造字体
-        Font f = new Font(font.getFamily(), style, size);
-
-        //5.总的角跨度
-        double totalArcAng = font.getSpace() * textLen;
-
-        //6.从边线向中心的移动因子
-        float minRat = 0.90f;
-
-        double startAngle = isTop ? -90f - totalArcAng / 2f : 90f - totalArcAng / 2f;
-        double step = 0.5;
-        int alCount = (int) Math.ceil(totalArcAng / step) + 1;
-        double[] angleArr = new double[alCount];
-        double[] arcLenArr = new double[alCount];
-        int num = 0;
-        double accArcLen = 0.0;
-        angleArr[num] = startAngle;
-        arcLenArr[num] = accArcLen;
-        num++;
-        double angR = startAngle * Math.PI / 180.0;
-        double lastX = radiusX * Math.cos(angR) + radiusWidth;
-        double lastY = radiusY * Math.sin(angR) + radiusHeight;
-        for (double i = startAngle + step; num < alCount; i += step) {
-            angR = i * Math.PI / 180.0;
-            double x = radiusX * Math.cos(angR) + radiusWidth, y = radiusY * Math.sin(angR) + radiusHeight;
-            accArcLen += Math.sqrt((lastX - x) * (lastX - x) + (lastY - y) * (lastY - y));
-            angleArr[num] = i;
-            arcLenArr[num] = accArcLen;
-            lastX = x;
-            lastY = y;
-            num++;
-        }
-        double arcPer = accArcLen / textLen;
-        for (int i = 0; i < textLen; i++) {
-            double arcL = i * arcPer + arcPer / 2.0;
-            double ang = 0.0;
-            for (int p = 0; p < arcLenArr.length - 1; p++) {
-                if (arcLenArr[p] <= arcL && arcL <= arcLenArr[p + 1]) {
-                    ang = (arcL >= ((arcLenArr[p] + arcLenArr[p + 1]) / 2.0)) ? angleArr[p + 1] : angleArr[p];
-                    break;
-                }
-            }
-            angR = (ang * Math.PI / 180f);
-            Float x = radiusX * (float) Math.cos(angR) + radiusWidth;
-            Float y = radiusY * (float) Math.sin(angR) + radiusHeight;
-            double qxang = Math.atan2(radiusY * Math.cos(angR), -radiusX * Math.sin(angR));
-            double fxang = qxang + Math.PI / 2.0;
-
-            int subIndex = isTop ? i : textLen - 1 - i;
-            String c = font.getText().substring(subIndex, subIndex + 1);
-
-            //获取文字高宽
-            FontMetrics fm = sun.font.FontDesignMetrics.getMetrics(f);
-            int w = fm.stringWidth(c), h = fm.getHeight();
-
-            if (isTop) {
-                x += h * minRat * (float) Math.cos(fxang);
-                y += h * minRat * (float) Math.sin(fxang);
-                x += -w / 2f * (float) Math.cos(qxang);
-                y += -w / 2f * (float) Math.sin(qxang);
-            } else {
-                x += (h * minRat) * (float) Math.cos(fxang);
-                y += (h * minRat) * (float) Math.sin(fxang);
-                x += w / 2f * (float) Math.cos(qxang);
-                y += w / 2f * (float) Math.sin(qxang);
-            }
-
-            // 旋转
-            AffineTransform affineTransform = new AffineTransform();
-            affineTransform.scale(0.8, 1);
-            if (isTop)
-                affineTransform.rotate(Math.toRadians((fxang * 180.0 / Math.PI - 90)), 0, 0);
-            else
-                affineTransform.rotate(Math.toRadians((fxang * 180.0 / Math.PI + 180 - 90)), 0, 0);
-            Font f2 = f.deriveFont(affineTransform);
-            g2d.setFont(f2);
-            g2d.drawString(c, x.intValue() + INIT_BEGIN, y.intValue() + INIT_BEGIN);
-        }
-    }
-
-    /**
-     * 画文字
-     */
-    private static void drawFont(Graphics2D g2d, int circleWidth, int circleHeight, SealFont font) {
-        if (font == null) {
-            return;
-        }
-
-        //1.字体长度
-        int textLen = font.getText().length();
-
-        //2.字体大小,默认根据字体长度动态设定
-        int size = font.getSize() == null ? (55 - textLen * 2) : font.getSize();
-
-        //3.字体样式
-        int style = font.getBold() ? Font.BOLD : Font.PLAIN;
-
-        //4.构造字体
-        Font f = new Font(font.getFamily(), style, size);
-        g2d.setFont(f);
-
-        FontRenderContext context = g2d.getFontRenderContext();
-        String[] fontTexts = font.getText().split("\n");
-        if (fontTexts.length > 1) {
-            int y = 0;
-            for (String fontText : fontTexts) {
-                y += Math.abs(f.getStringBounds(fontText, context).getHeight());
-            }
-            //5.设置上边距
-            float margin = INIT_BEGIN + (float) (circleHeight / 2 - y / 2);
-            for (String fontText : fontTexts) {
-                Rectangle2D rectangle2D = f.getStringBounds(fontText, context);
-                g2d.drawString(fontText, (float) (circleWidth / 2 - rectangle2D.getCenterX()), margin);
-                margin += Math.abs(rectangle2D.getHeight());
-            }
-        } else {
-            Rectangle2D rectangle2D = f.getStringBounds(font.getText(), context);
-            //5.设置上边距,默认在中心
-            float margin = font.getMargin() == null ?
-                    (float) (circleHeight / 2 - rectangle2D.getCenterY()) :
-                    (float) (circleHeight / 2 - rectangle2D.getCenterY()) + (float) font.getMargin();
-            g2d.drawString(font.getText(), (float) (circleWidth / 2 - rectangle2D.getCenterX()), margin);
-        }
-    }
-
-    /**
-     * 画圆
-     */
-    private static void drawCircle(Graphics2D g2d, SealCircle circle, int x, int y) {
-        if (circle == null) {
-            return;
-        }
-
-        //1.圆线条粗细默认是圆直径的1/35
-        int lineSize = circle.getLine() == null ? circle.getHeight() * 2 / (35) : circle.getLine();
-
-        //2.画圆
-        g2d.setStroke(new BasicStroke(lineSize));
-        g2d.drawOval(x, y, circle.getWidth() * 2, circle.getHeight() * 2);
-    }
-
-    /**
-     * 画私章
-     */
-    public boolean draw2(String pngPath) throws Exception {
-        if (mainFont == null || mainFont.getText().length() < 2 || mainFont.getText().length() > 4) {
-            throw new IllegalArgumentException("请输入2-4个字");
-        }
-
-        int fixH = 18;
-        int fixW = 2;
-
-        //1.画布
-        BufferedImage bi = new BufferedImage(size, size / 2, BufferedImage.TYPE_4BYTE_ABGR);
-
-        //2.画笔
-        Graphics2D g2d = bi.createGraphics();
-
-        //2.1设置画笔颜色
-        g2d.setPaint(Color.RED);
-
-        //2.2抗锯齿设置
-        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-
-        //3.写签名
-        int marginW = fixW + borderSquare;
-        float marginH;
-        FontRenderContext context = g2d.getFontRenderContext();
-        Rectangle2D rectangle;
-        Font f;
-
-        if (mainFont.getText().length() == 2) {
-            if (stamp != null && stamp.trim().length() > 0) {
-                bi = drawThreeFont(bi, g2d, mainFont.append(stamp), borderSquare, size, fixH, fixW, true);
-            } else {
-                f = new Font(mainFont.getFamily(), Font.BOLD, mainFont.getSize());
-                g2d.setFont(f);
-                rectangle = f.getStringBounds(mainFont.getText().substring(0, 1), context);
-                marginH = (float) (Math.abs(rectangle.getCenterY()) * 2 + marginW) + fixH - 4;
-                g2d.drawString(mainFont.getText().substring(0, 1), marginW, marginH);
-                marginW += Math.abs(rectangle.getCenterX()) * 2 + (mainFont.getSpace() == null ? INIT_BEGIN : mainFont.getSpace());
-                g2d.drawString(mainFont.getText().substring(1), marginW, marginH);
-
-                //拉伸
-                BufferedImage nbi = new BufferedImage(size, size, bi.getType());
-                Graphics2D ng2d = nbi.createGraphics();
-                ng2d.setPaint(Color.RED);
-                ng2d.drawImage(bi, 0, 0, size, size, null);
-
-                //画正方形
-                ng2d.setStroke(new BasicStroke(borderSquare));
-                ng2d.drawRect(0, 0, size, size);
-                ng2d.dispose();
-                bi = nbi;
-            }
-        } else if (mainFont.getText().length() == 3) {
-            if (stamp != null && stamp.trim().length() > 0) {
-                bi = drawFourFont(bi, mainFont.append(stamp), borderSquare, size, fixH, fixW);
-            } else {
-                bi = drawThreeFont(bi, g2d, mainFont, borderSquare, size, fixH, fixW, false);
-            }
-        } else {
-            bi = drawFourFont(bi, mainFont, borderSquare, size, fixH, fixW);
-        }
-
-        g2d.dispose();
-
-        return ImageIO.write(bi, "PNG", new File(pngPath));
-    }
-
-    /**
-     * 画三字
-     */
-    private static BufferedImage drawThreeFont(BufferedImage bi, Graphics2D g2d, SealFont font, int lineSize, int imageSize, int fixH, int fixW, boolean isWithYin) {
-        fixH -= 9;
-        int marginW = fixW + lineSize;
-        //设置字体
-        Font f = new Font(font.getFamily(), Font.BOLD, font.getSize());
-        g2d.setFont(f);
-        FontRenderContext context = g2d.getFontRenderContext();
-        Rectangle2D rectangle = f.getStringBounds(font.getText().substring(0, 1), context);
-        float marginH = (float) (Math.abs(rectangle.getCenterY()) * 2 + marginW) + fixH;
-        int oldW = marginW;
-
-        if (isWithYin) {
-            g2d.drawString(font.getText().substring(2, 3), marginW, marginH);
-            marginW += rectangle.getCenterX() * 2 + (font.getSpace() == null ? INIT_BEGIN : font.getSpace());
-        } else {
-            marginW += rectangle.getCenterX() * 2 + (font.getSpace() == null ? INIT_BEGIN : font.getSpace());
-            g2d.drawString(font.getText().substring(0, 1), marginW, marginH);
-        }
-
-        //拉伸
-        BufferedImage nbi = new BufferedImage(imageSize, imageSize, bi.getType());
-        Graphics2D ng2d = nbi.createGraphics();
-        ng2d.setPaint(Color.RED);
-        ng2d.drawImage(bi, 0, 0, imageSize, imageSize, null);
-
-        //画正方形
-        ng2d.setStroke(new BasicStroke(lineSize));
-        ng2d.drawRect(0, 0, imageSize, imageSize);
-        ng2d.dispose();
-        bi = nbi;
-
-        g2d = bi.createGraphics();
-        g2d.setPaint(Color.RED);
-        g2d.setFont(f);
-        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-
-        if (isWithYin) {
-            g2d.drawString(font.getText().substring(0, 1), marginW, marginH += fixH);
-            rectangle = f.getStringBounds(font.getText(), context);
-            marginH += Math.abs(rectangle.getHeight());
-            g2d.drawString(font.getText().substring(1), marginW, marginH);
-        } else {
-            g2d.drawString(font.getText().substring(1, 2), oldW, marginH += fixH);
-            rectangle = f.getStringBounds(font.getText(), context);
-            marginH += Math.abs(rectangle.getHeight());
-            g2d.drawString(font.getText().substring(2, 3), oldW, marginH);
-        }
-        return bi;
-    }
-
-    /**
-     * 画四字
-     */
-    private static BufferedImage drawFourFont(BufferedImage bi, SealFont font, int lineSize, int imageSize, int fixH, int fixW) {
-        int marginW = fixW + lineSize;
-        //拉伸
-        BufferedImage nbi = new BufferedImage(imageSize, imageSize, bi.getType());
-        Graphics2D ng2d = nbi.createGraphics();
-        ng2d.setPaint(Color.RED);
-        ng2d.drawImage(bi, 0, 0, imageSize, imageSize, null);
-
-        //画正方形
-        ng2d.setStroke(new BasicStroke(lineSize));
-        ng2d.drawRect(0, 0, imageSize, imageSize);
-        ng2d.dispose();
-        bi = nbi;
-
-        Graphics2D g2d = bi.createGraphics();
-        g2d.setPaint(Color.RED);
-        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-        FontRenderContext context = g2d.getFontRenderContext();
-
-        Font f = new Font(font.getFamily(), Font.BOLD, font.getSize());
-        g2d.setFont(f);
-        Rectangle2D rectangle = f.getStringBounds(font.getText().substring(0, 1), context);
-        float marginH = (float) (Math.abs(rectangle.getCenterY()) * 2 + marginW) + fixH;
-
-        g2d.drawString(font.getText().substring(2, 3), marginW, marginH);
-        int oldW = marginW;
-        marginW += Math.abs(rectangle.getCenterX()) * 2 + (font.getSpace() == null ? INIT_BEGIN : font.getSpace());
-
-        g2d.drawString(font.getText().substring(0, 1), marginW, marginH);
-        marginH += Math.abs(rectangle.getHeight());
-
-        g2d.drawString(font.getText().substring(3, 4), oldW, marginH);
-
-        g2d.drawString(font.getText().substring(1, 2), marginW, marginH);
-
-        return bi;
-    }
-}
+//package com.sztzjy.digital_credit.util.seal;
+//
+//import lombok.Builder;
+//import lombok.Getter;
+//
+//import javax.imageio.ImageIO;
+//import java.awt.*;
+//import java.awt.font.FontRenderContext;
+//import java.awt.geom.AffineTransform;
+//import java.awt.geom.Rectangle2D;
+//import java.awt.image.BufferedImage;
+//import java.io.File;
+//
+///**
+// * 二,绘画出不同的电子合同章
+// */
+//
+//@Builder
+//@Getter
+//public class SealUtil {
+//
+//    // 起始位置
+//    private static final int INIT_BEGIN = 5;
+//
+//    // 尺寸
+//    private Integer size;
+//
+//    // 颜色
+//    private Color color;
+//
+//    // 主字
+//    private SealFont mainFont;
+//
+//    // 副字
+//    private SealFont viceFont;
+//
+//    // 抬头
+//    private SealFont titleFont;
+//
+//    // 中心字
+//    private SealFont centerFont;
+//
+//    // 边线圆
+//    private SealCircle borderCircle;
+//
+//    // 内边线圆
+//    private SealCircle borderInnerCircle;
+//
+//    // 内线圆
+//    private SealCircle innerCircle;
+//
+//    // 边线框
+//    private Integer borderSquare;
+//
+//    // 加字
+//    private String stamp;
+//
+//    /**
+//     * 画公章
+//     */
+//    public boolean draw(String pngPath) throws Exception {
+//        if (borderSquare != null) {
+//            return draw2(pngPath); // 画私章
+//        }
+//
+//        //1.画布
+//        BufferedImage bi = new BufferedImage(size, size, BufferedImage.TYPE_4BYTE_ABGR);
+//
+//        //2.画笔
+//        Graphics2D g2d = bi.createGraphics();
+//
+//        //2.1抗锯齿设置
+//        //文本不抗锯齿,否则圆中心的文字会被拉长
+//        RenderingHints hints = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
+//        //其他图形抗锯齿
+//        hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+//        g2d.setRenderingHints(hints);
+//
+//        //2.2设置背景透明度
+//        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, 0));
+//
+//        //2.3填充矩形
+//        g2d.fillRect(0, 0, size, size);
+//
+//        //2.4重设透明度,开始画图
+//        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, 1));
+//
+//        //2.5设置画笔颜色
+//        g2d.setPaint(color == null ? Color.RED : color);
+//
+//        //3.画边线圆
+//        if (borderCircle != null) {
+//            drawCircle(g2d, borderCircle, INIT_BEGIN, INIT_BEGIN);
+//        } else {
+//            throw new Exception("BorderCircle can not null!");
+//        }
+//
+//        int borderCircleWidth = borderCircle.getWidth();
+//        int borderCircleHeight = borderCircle.getHeight();
+//
+//        //4.画内边线圆
+//        if (borderInnerCircle != null) {
+//            int x = INIT_BEGIN + borderCircleWidth - borderInnerCircle.getWidth();
+//            int y = INIT_BEGIN + borderCircleHeight - borderInnerCircle.getHeight();
+//            drawCircle(g2d, borderInnerCircle, x, y);
+//        }
+//
+//        //5.画内环线圆
+//        if (innerCircle != null) {
+//            int x = INIT_BEGIN + borderCircleWidth - innerCircle.getWidth();
+//            int y = INIT_BEGIN + borderCircleHeight - innerCircle.getHeight();
+//            drawCircle(g2d, innerCircle, x, y);
+//        }
+//
+//        //6.画弧形主文字
+//        if (borderCircleHeight != borderCircleWidth) {
+//            drawArcFont4Oval(g2d, borderCircle, mainFont, true);
+//        } else {
+//            drawArcFont4Circle(g2d, borderCircleHeight, mainFont, true);
+//        }
+//
+//        //7.画弧形副文字
+//        if (borderCircleHeight != borderCircleWidth) {
+//            drawArcFont4Oval(g2d, borderCircle, viceFont, false);
+//        } else {
+//            drawArcFont4Circle(g2d, borderCircleHeight, viceFont, false);
+//        }
+//
+//        //8.画中心字
+//        drawFont(g2d, (borderCircleWidth + INIT_BEGIN) * 2, (borderCircleHeight + INIT_BEGIN) * 2, centerFont);
+//
+//        //9.画抬头文字
+//        drawFont(g2d, (borderCircleWidth + INIT_BEGIN) * 2, (borderCircleHeight + INIT_BEGIN) * 2, titleFont);
+//
+//        g2d.dispose();
+//
+//        return ImageIO.write(bi, "PNG", new File(pngPath));
+//    }
+//
+//    /**
+//     * 绘制圆弧形文字
+//     */
+//    private static void drawArcFont4Circle(Graphics2D g2d, int circleRadius, SealFont font, boolean isTop) {
+//        if (font == null) {
+//            return;
+//        }
+//
+//        //1.字体长度
+//        int textLen = font.getText().length();
+//
+//        //2.字体大小,默认根据字体长度动态设定
+//        int size = font.getSize() == null ? (55 - textLen * 2) : font.getSize();
+//
+//        //3.字体样式
+//        int style = font.getBold() ? Font.BOLD : Font.PLAIN;
+//
+//        //4.构造字体
+//        Font f = new Font(font.getFamily(), style, size);
+//
+//        FontRenderContext context = g2d.getFontRenderContext();
+//        Rectangle2D rectangle = f.getStringBounds(font.getText(), context);
+//
+//        //5.文字之间间距,默认动态调整
+//        double space;
+//        if (font.getSpace() != null) {
+//            space = font.getSpace();
+//        } else {
+//            if (textLen == 1) {
+//                space = 0;
+//            } else {
+//                space = rectangle.getWidth() / (textLen - 1) * 0.9;
+//            }
+//        }
+//
+//        //6.距离外圈距离
+//        int margin = font.getMargin() == null ? INIT_BEGIN : font.getMargin();
+//
+//        //7.写字
+//        double newRadius = circleRadius + rectangle.getY() - margin;
+//        double radianPerInterval = 2 * Math.asin(space / (2 * newRadius));
+//
+//        double fix = 0.04;
+//        if (isTop) {
+//            fix = 0.18;
+//        }
+//        double firstAngle;
+//        if (!isTop) {
+//            if (textLen % 2 == 1) {
+//                firstAngle = Math.PI + Math.PI / 2 - (textLen - 1) * radianPerInterval / 2.0 - fix;
+//            } else {
+//                firstAngle = Math.PI + Math.PI / 2 - ((textLen / 2.0 - 0.5) * radianPerInterval) - fix;
+//            }
+//        } else {
+//            if (textLen % 2 == 1) {
+//                firstAngle = (textLen - 1) * radianPerInterval / 2.0 + Math.PI / 2 + fix;
+//            } else {
+//                firstAngle = (textLen / 2.0 - 0.5) * radianPerInterval + Math.PI / 2 + fix;
+//            }
+//        }
+//
+//        for (int i = 0; i < textLen; i++) {
+//            double theta;
+//            double thetaX;
+//            double thetaY;
+//
+//            if (!isTop) {
+//                theta = firstAngle + i * radianPerInterval;
+//                thetaX = newRadius * Math.sin(Math.PI / 2 - theta);
+//                thetaY = newRadius * Math.cos(theta - Math.PI / 2);
+//            } else {
+//                theta = firstAngle - i * radianPerInterval;
+//                thetaX = newRadius * Math.sin(Math.PI / 2 - theta);
+//                thetaY = newRadius * Math.cos(theta - Math.PI / 2);
+//            }
+//
+//            AffineTransform transform;
+//            if (!isTop) {
+//                transform = AffineTransform.getRotateInstance(Math.PI + Math.PI / 2 - theta);
+//            } else {
+//                transform = AffineTransform.getRotateInstance(Math.PI / 2 - theta + Math.toRadians(8));
+//            }
+//            Font f2 = f.deriveFont(transform);
+//            g2d.setFont(f2);
+//            g2d.drawString(font.getText().substring(i, i + 1), (float) (circleRadius + thetaX + INIT_BEGIN), (float) (circleRadius - thetaY + INIT_BEGIN));
+//        }
+//    }
+//
+//    /**
+//     * 绘制椭圆弧形文字
+//     */
+//    private static void drawArcFont4Oval(Graphics2D g2d, SealCircle sealCircle, SealFont font, boolean isTop) {
+//        if (font == null) {
+//            return;
+//        }
+//        float radiusX = sealCircle.getWidth();
+//        float radiusY = sealCircle.getHeight();
+//        float radiusWidth = radiusX + sealCircle.getLine();
+//        float radiusHeight = radiusY + sealCircle.getLine();
+//
+//        //1.字体长度
+//        int textLen = font.getText().length();
+//
+//        //2.字体大小,默认根据字体长度动态设定
+//        int size = font.getSize() == null ? 25 + (10 - textLen) / 2 : font.getSize();
+//
+//        //3.字体样式
+//        int style = font.getBold() ? Font.BOLD : Font.PLAIN;
+//
+//        //4.构造字体
+//        Font f = new Font(font.getFamily(), style, size);
+//
+//        //5.总的角跨度
+//        double totalArcAng = font.getSpace() * textLen;
+//
+//        //6.从边线向中心的移动因子
+//        float minRat = 0.90f;
+//
+//        double startAngle = isTop ? -90f - totalArcAng / 2f : 90f - totalArcAng / 2f;
+//        double step = 0.5;
+//        int alCount = (int) Math.ceil(totalArcAng / step) + 1;
+//        double[] angleArr = new double[alCount];
+//        double[] arcLenArr = new double[alCount];
+//        int num = 0;
+//        double accArcLen = 0.0;
+//        angleArr[num] = startAngle;
+//        arcLenArr[num] = accArcLen;
+//        num++;
+//        double angR = startAngle * Math.PI / 180.0;
+//        double lastX = radiusX * Math.cos(angR) + radiusWidth;
+//        double lastY = radiusY * Math.sin(angR) + radiusHeight;
+//        for (double i = startAngle + step; num < alCount; i += step) {
+//            angR = i * Math.PI / 180.0;
+//            double x = radiusX * Math.cos(angR) + radiusWidth, y = radiusY * Math.sin(angR) + radiusHeight;
+//            accArcLen += Math.sqrt((lastX - x) * (lastX - x) + (lastY - y) * (lastY - y));
+//            angleArr[num] = i;
+//            arcLenArr[num] = accArcLen;
+//            lastX = x;
+//            lastY = y;
+//            num++;
+//        }
+//        double arcPer = accArcLen / textLen;
+//        for (int i = 0; i < textLen; i++) {
+//            double arcL = i * arcPer + arcPer / 2.0;
+//            double ang = 0.0;
+//            for (int p = 0; p < arcLenArr.length - 1; p++) {
+//                if (arcLenArr[p] <= arcL && arcL <= arcLenArr[p + 1]) {
+//                    ang = (arcL >= ((arcLenArr[p] + arcLenArr[p + 1]) / 2.0)) ? angleArr[p + 1] : angleArr[p];
+//                    break;
+//                }
+//            }
+//            angR = (ang * Math.PI / 180f);
+//            Float x = radiusX * (float) Math.cos(angR) + radiusWidth;
+//            Float y = radiusY * (float) Math.sin(angR) + radiusHeight;
+//            double qxang = Math.atan2(radiusY * Math.cos(angR), -radiusX * Math.sin(angR));
+//            double fxang = qxang + Math.PI / 2.0;
+//
+//            int subIndex = isTop ? i : textLen - 1 - i;
+//            String c = font.getText().substring(subIndex, subIndex + 1);
+//
+//            //获取文字高宽
+//            FontMetrics fm = sun.font.FontDesignMetrics.getMetrics(f);
+//            int w = fm.stringWidth(c), h = fm.getHeight();
+//
+//            if (isTop) {
+//                x += h * minRat * (float) Math.cos(fxang);
+//                y += h * minRat * (float) Math.sin(fxang);
+//                x += -w / 2f * (float) Math.cos(qxang);
+//                y += -w / 2f * (float) Math.sin(qxang);
+//            } else {
+//                x += (h * minRat) * (float) Math.cos(fxang);
+//                y += (h * minRat) * (float) Math.sin(fxang);
+//                x += w / 2f * (float) Math.cos(qxang);
+//                y += w / 2f * (float) Math.sin(qxang);
+//            }
+//
+//            // 旋转
+//            AffineTransform affineTransform = new AffineTransform();
+//            affineTransform.scale(0.8, 1);
+//            if (isTop)
+//                affineTransform.rotate(Math.toRadians((fxang * 180.0 / Math.PI - 90)), 0, 0);
+//            else
+//                affineTransform.rotate(Math.toRadians((fxang * 180.0 / Math.PI + 180 - 90)), 0, 0);
+//            Font f2 = f.deriveFont(affineTransform);
+//            g2d.setFont(f2);
+//            g2d.drawString(c, x.intValue() + INIT_BEGIN, y.intValue() + INIT_BEGIN);
+//        }
+//    }
+//
+//    /**
+//     * 画文字
+//     */
+//    private static void drawFont(Graphics2D g2d, int circleWidth, int circleHeight, SealFont font) {
+//        if (font == null) {
+//            return;
+//        }
+//
+//        //1.字体长度
+//        int textLen = font.getText().length();
+//
+//        //2.字体大小,默认根据字体长度动态设定
+//        int size = font.getSize() == null ? (55 - textLen * 2) : font.getSize();
+//
+//        //3.字体样式
+//        int style = font.getBold() ? Font.BOLD : Font.PLAIN;
+//
+//        //4.构造字体
+//        Font f = new Font(font.getFamily(), style, size);
+//        g2d.setFont(f);
+//
+//        FontRenderContext context = g2d.getFontRenderContext();
+//        String[] fontTexts = font.getText().split("\n");
+//        if (fontTexts.length > 1) {
+//            int y = 0;
+//            for (String fontText : fontTexts) {
+//                y += Math.abs(f.getStringBounds(fontText, context).getHeight());
+//            }
+//            //5.设置上边距
+//            float margin = INIT_BEGIN + (float) (circleHeight / 2 - y / 2);
+//            for (String fontText : fontTexts) {
+//                Rectangle2D rectangle2D = f.getStringBounds(fontText, context);
+//                g2d.drawString(fontText, (float) (circleWidth / 2 - rectangle2D.getCenterX()), margin);
+//                margin += Math.abs(rectangle2D.getHeight());
+//            }
+//        } else {
+//            Rectangle2D rectangle2D = f.getStringBounds(font.getText(), context);
+//            //5.设置上边距,默认在中心
+//            float margin = font.getMargin() == null ?
+//                    (float) (circleHeight / 2 - rectangle2D.getCenterY()) :
+//                    (float) (circleHeight / 2 - rectangle2D.getCenterY()) + (float) font.getMargin();
+//            g2d.drawString(font.getText(), (float) (circleWidth / 2 - rectangle2D.getCenterX()), margin);
+//        }
+//    }
+//
+//    /**
+//     * 画圆
+//     */
+//    private static void drawCircle(Graphics2D g2d, SealCircle circle, int x, int y) {
+//        if (circle == null) {
+//            return;
+//        }
+//
+//        //1.圆线条粗细默认是圆直径的1/35
+//        int lineSize = circle.getLine() == null ? circle.getHeight() * 2 / (35) : circle.getLine();
+//
+//        //2.画圆
+//        g2d.setStroke(new BasicStroke(lineSize));
+//        g2d.drawOval(x, y, circle.getWidth() * 2, circle.getHeight() * 2);
+//    }
+//
+//    /**
+//     * 画私章
+//     */
+//    public boolean draw2(String pngPath) throws Exception {
+//        if (mainFont == null || mainFont.getText().length() < 2 || mainFont.getText().length() > 4) {
+//            throw new IllegalArgumentException("请输入2-4个字");
+//        }
+//
+//        int fixH = 18;
+//        int fixW = 2;
+//
+//        //1.画布
+//        BufferedImage bi = new BufferedImage(size, size / 2, BufferedImage.TYPE_4BYTE_ABGR);
+//
+//        //2.画笔
+//        Graphics2D g2d = bi.createGraphics();
+//
+//        //2.1设置画笔颜色
+//        g2d.setPaint(Color.RED);
+//
+//        //2.2抗锯齿设置
+//        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+//
+//        //3.写签名
+//        int marginW = fixW + borderSquare;
+//        float marginH;
+//        FontRenderContext context = g2d.getFontRenderContext();
+//        Rectangle2D rectangle;
+//        Font f;
+//
+//        if (mainFont.getText().length() == 2) {
+//            if (stamp != null && stamp.trim().length() > 0) {
+//                bi = drawThreeFont(bi, g2d, mainFont.append(stamp), borderSquare, size, fixH, fixW, true);
+//            } else {
+//                f = new Font(mainFont.getFamily(), Font.BOLD, mainFont.getSize());
+//                g2d.setFont(f);
+//                rectangle = f.getStringBounds(mainFont.getText().substring(0, 1), context);
+//                marginH = (float) (Math.abs(rectangle.getCenterY()) * 2 + marginW) + fixH - 4;
+//                g2d.drawString(mainFont.getText().substring(0, 1), marginW, marginH);
+//                marginW += Math.abs(rectangle.getCenterX()) * 2 + (mainFont.getSpace() == null ? INIT_BEGIN : mainFont.getSpace());
+//                g2d.drawString(mainFont.getText().substring(1), marginW, marginH);
+//
+//                //拉伸
+//                BufferedImage nbi = new BufferedImage(size, size, bi.getType());
+//                Graphics2D ng2d = nbi.createGraphics();
+//                ng2d.setPaint(Color.RED);
+//                ng2d.drawImage(bi, 0, 0, size, size, null);
+//
+//                //画正方形
+//                ng2d.setStroke(new BasicStroke(borderSquare));
+//                ng2d.drawRect(0, 0, size, size);
+//                ng2d.dispose();
+//                bi = nbi;
+//            }
+//        } else if (mainFont.getText().length() == 3) {
+//            if (stamp != null && stamp.trim().length() > 0) {
+//                bi = drawFourFont(bi, mainFont.append(stamp), borderSquare, size, fixH, fixW);
+//            } else {
+//                bi = drawThreeFont(bi, g2d, mainFont, borderSquare, size, fixH, fixW, false);
+//            }
+//        } else {
+//            bi = drawFourFont(bi, mainFont, borderSquare, size, fixH, fixW);
+//        }
+//
+//        g2d.dispose();
+//
+//        return ImageIO.write(bi, "PNG", new File(pngPath));
+//    }
+//
+//    /**
+//     * 画三字
+//     */
+//    private static BufferedImage drawThreeFont(BufferedImage bi, Graphics2D g2d, SealFont font, int lineSize, int imageSize, int fixH, int fixW, boolean isWithYin) {
+//        fixH -= 9;
+//        int marginW = fixW + lineSize;
+//        //设置字体
+//        Font f = new Font(font.getFamily(), Font.BOLD, font.getSize());
+//        g2d.setFont(f);
+//        FontRenderContext context = g2d.getFontRenderContext();
+//        Rectangle2D rectangle = f.getStringBounds(font.getText().substring(0, 1), context);
+//        float marginH = (float) (Math.abs(rectangle.getCenterY()) * 2 + marginW) + fixH;
+//        int oldW = marginW;
+//
+//        if (isWithYin) {
+//            g2d.drawString(font.getText().substring(2, 3), marginW, marginH);
+//            marginW += rectangle.getCenterX() * 2 + (font.getSpace() == null ? INIT_BEGIN : font.getSpace());
+//        } else {
+//            marginW += rectangle.getCenterX() * 2 + (font.getSpace() == null ? INIT_BEGIN : font.getSpace());
+//            g2d.drawString(font.getText().substring(0, 1), marginW, marginH);
+//        }
+//
+//        //拉伸
+//        BufferedImage nbi = new BufferedImage(imageSize, imageSize, bi.getType());
+//        Graphics2D ng2d = nbi.createGraphics();
+//        ng2d.setPaint(Color.RED);
+//        ng2d.drawImage(bi, 0, 0, imageSize, imageSize, null);
+//
+//        //画正方形
+//        ng2d.setStroke(new BasicStroke(lineSize));
+//        ng2d.drawRect(0, 0, imageSize, imageSize);
+//        ng2d.dispose();
+//        bi = nbi;
+//
+//        g2d = bi.createGraphics();
+//        g2d.setPaint(Color.RED);
+//        g2d.setFont(f);
+//        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+//
+//        if (isWithYin) {
+//            g2d.drawString(font.getText().substring(0, 1), marginW, marginH += fixH);
+//            rectangle = f.getStringBounds(font.getText(), context);
+//            marginH += Math.abs(rectangle.getHeight());
+//            g2d.drawString(font.getText().substring(1), marginW, marginH);
+//        } else {
+//            g2d.drawString(font.getText().substring(1, 2), oldW, marginH += fixH);
+//            rectangle = f.getStringBounds(font.getText(), context);
+//            marginH += Math.abs(rectangle.getHeight());
+//            g2d.drawString(font.getText().substring(2, 3), oldW, marginH);
+//        }
+//        return bi;
+//    }
+//
+//    /**
+//     * 画四字
+//     */
+//    private static BufferedImage drawFourFont(BufferedImage bi, SealFont font, int lineSize, int imageSize, int fixH, int fixW) {
+//        int marginW = fixW + lineSize;
+//        //拉伸
+//        BufferedImage nbi = new BufferedImage(imageSize, imageSize, bi.getType());
+//        Graphics2D ng2d = nbi.createGraphics();
+//        ng2d.setPaint(Color.RED);
+//        ng2d.drawImage(bi, 0, 0, imageSize, imageSize, null);
+//
+//        //画正方形
+//        ng2d.setStroke(new BasicStroke(lineSize));
+//        ng2d.drawRect(0, 0, imageSize, imageSize);
+//        ng2d.dispose();
+//        bi = nbi;
+//
+//        Graphics2D g2d = bi.createGraphics();
+//        g2d.setPaint(Color.RED);
+//        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+//        FontRenderContext context = g2d.getFontRenderContext();
+//
+//        Font f = new Font(font.getFamily(), Font.BOLD, font.getSize());
+//        g2d.setFont(f);
+//        Rectangle2D rectangle = f.getStringBounds(font.getText().substring(0, 1), context);
+//        float marginH = (float) (Math.abs(rectangle.getCenterY()) * 2 + marginW) + fixH;
+//
+//        g2d.drawString(font.getText().substring(2, 3), marginW, marginH);
+//        int oldW = marginW;
+//        marginW += Math.abs(rectangle.getCenterX()) * 2 + (font.getSpace() == null ? INIT_BEGIN : font.getSpace());
+//
+//        g2d.drawString(font.getText().substring(0, 1), marginW, marginH);
+//        marginH += Math.abs(rectangle.getHeight());
+//
+//        g2d.drawString(font.getText().substring(3, 4), oldW, marginH);
+//
+//        g2d.drawString(font.getText().substring(1, 2), marginW, marginH);
+//
+//        return bi;
+//    }
+//}