Skip to content

Commit c6258fe

Browse files
committed
添加印章生成工具
1 parent 1cd84af commit c6258fe

8 files changed

Lines changed: 331 additions & 185 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,3 +285,4 @@ xJavaFxTool
285285
![输入图片说明](images/随机数生成工具.png "随机数生成工具.png")
286286
![输入图片说明](images/剪贴板历史工具.png "剪贴板历史工具.png")
287287
![输入图片说明](images/久坐提醒工具.png "久坐提醒工具.png")
288+
![输入图片说明](images/印章生成工具.png "印章生成工具.png")

images/印章生成工具.png

51.8 KB
Loading

src/main/java/com/xwintop/xJavaFxTool/controller/littleTools/SealBuilderToolController.java

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,33 @@
33
import com.xwintop.xJavaFxTool.services.littleTools.SealBuilderToolService;
44
import com.xwintop.xJavaFxTool.utils.JavaFxViewUtil;
55
import com.xwintop.xJavaFxTool.view.littleTools.SealBuilderToolView;
6+
import com.xwintop.xcore.util.javafx.FileChooserUtil;
7+
import com.xwintop.xcore.util.javafx.TooltipUtil;
8+
import javafx.embed.swing.SwingFXUtils;
69
import javafx.event.ActionEvent;
710
import javafx.fxml.FXML;
811
import javafx.scene.control.Spinner;
912
import javafx.scene.paint.Color;
13+
import javafx.stage.FileChooser;
1014
import lombok.Getter;
1115
import lombok.Setter;
1216
import lombok.extern.slf4j.Slf4j;
17+
import org.apache.commons.lang3.time.DateFormatUtils;
1318

19+
import javax.imageio.ImageIO;
1420
import java.awt.*;
21+
import java.io.File;
1522
import java.net.URL;
23+
import java.util.Date;
1624
import java.util.ResourceBundle;
1725

26+
/**
27+
* @ClassName: SealBuilderToolController
28+
* @Description: 印章生成工具
29+
* @author: xufeng
30+
* @date: 2019/8/12 0012 23:04
31+
*/
32+
1833
@Getter
1934
@Setter
2035
@Slf4j
@@ -51,6 +66,12 @@ private void initView() {
5166
JavaFxViewUtil.setSpinnerValueFactory(circleHeightSpinner, 0, Integer.MAX_VALUE, 140);
5267
JavaFxViewUtil.setSpinnerValueFactory(circleHeightSpinner1, 0, Integer.MAX_VALUE, 0);
5368
JavaFxViewUtil.setSpinnerValueFactory(circleHeightSpinner2, 0, Integer.MAX_VALUE, 0);
69+
70+
JavaFxViewUtil.setSpinnerValueFactory(fontSizeSpinner4, 0, Integer.MAX_VALUE, 120);
71+
JavaFxViewUtil.setSpinnerValueFactory(fontSpaceSpinner4, 0, Double.MAX_VALUE, 0);
72+
JavaFxViewUtil.setSpinnerValueFactory(marginSizeSpinner4, 0, Integer.MAX_VALUE, 0);
73+
JavaFxViewUtil.setSpinnerValueFactory(lineSizeSpinner3, 0, Integer.MAX_VALUE, 16);
74+
5475
JavaFxViewUtil.setSpinnerValueFactory(imageSizeSpinner, 0, Integer.MAX_VALUE, 300);
5576

5677
String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
@@ -62,15 +83,18 @@ private void initView() {
6283
fontFamilyChoiceBox2.setValue("宋体");
6384
fontFamilyChoiceBox3.getItems().addAll(fontNames);
6485
fontFamilyChoiceBox3.setValue("宋体");
86+
fontFamilyChoiceBox4.getItems().addAll(fontNames);
87+
fontFamilyChoiceBox4.setValue("宋体");
6588
}
6689

6790
private void initEvent() {
68-
Spinner[] spinners = new Spinner[]{fontSizeSpinner, fontSizeSpinner1, fontSizeSpinner2, fontSizeSpinner3,
91+
Spinner[] spinners = new Spinner[]{imageSizeSpinner, fontSizeSpinner, fontSizeSpinner1, fontSizeSpinner2, fontSizeSpinner3,
6992
fontSpaceSpinner, fontSpaceSpinner1, fontSpaceSpinner2, fontSpaceSpinner3,
7093
marginSizeSpinner, marginSizeSpinner1, marginSizeSpinner2, marginSizeSpinner3,
7194
lineSizeSpinner, lineSizeSpinner1, lineSizeSpinner2,
7295
circleWidthSpinner, circleWidthSpinner1, circleWidthSpinner2,
73-
circleHeightSpinner, circleHeightSpinner1, circleHeightSpinner2};
96+
circleHeightSpinner, circleHeightSpinner1, circleHeightSpinner2,
97+
fontSizeSpinner4, fontSpaceSpinner4, marginSizeSpinner4, lineSizeSpinner3};
7498
for (Spinner spinner : spinners) {
7599
spinner.valueProperty().addListener((observable, oldValue, newValue) -> {
76100
builderAction();
@@ -82,8 +106,13 @@ private void initService() {
82106
}
83107

84108
@FXML
85-
private void saveAction(ActionEvent event) {
86-
builderAction();
109+
private void saveAction(ActionEvent event) throws Exception {
110+
String fileName = "x" + DateFormatUtils.format(new Date(), "yyyyMMddHHmm") + ".png";
111+
File file = FileChooserUtil.chooseSaveFile(fileName, new FileChooser.ExtensionFilter("All Images", "*.*"), new FileChooser.ExtensionFilter("PNG", "*.png"));
112+
if (file != null) {
113+
ImageIO.write(SwingFXUtils.fromFXImage(codeImageView.getImage(), null), "PNG", file);
114+
TooltipUtil.showToast("保存图片成功,图片在:" + file.getPath());
115+
}
87116
}
88117

89118
@FXML
@@ -94,4 +123,5 @@ private void builderAction() {
94123
log.error("生成错误:", e);
95124
}
96125
}
126+
97127
}

src/main/java/com/xwintop/xJavaFxTool/services/littleTools/SealBuilderToolService.java

Lines changed: 70 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@
1111

1212
import java.awt.image.BufferedImage;
1313

14+
/**
15+
* @ClassName: SealBuilderToolService
16+
* @Description: 印章生成工具
17+
* @author: xufeng
18+
* @date: 2019/8/12 0012 23:04
19+
*/
20+
1421
@Getter
1522
@Setter
1623
@Slf4j
@@ -22,49 +29,70 @@ public SealBuilderToolService(SealBuilderToolController sealBuilderToolControlle
2229
}
2330

2431
public void builderAction() throws Exception {
25-
SealUtil.SealCircle borderCircle = new SealUtil.SealCircle();
26-
borderCircle.setLineSize(sealBuilderToolController.getLineSizeSpinner().getValue());
27-
borderCircle.setCircleWidth(sealBuilderToolController.getCircleWidthSpinner().getValue());
28-
borderCircle.setCircleHeight(sealBuilderToolController.getCircleHeightSpinner().getValue());
29-
SealUtil.SealFont mainFont = new SealUtil.SealFont();
30-
mainFont.setFontText(sealBuilderToolController.getContentTextField().getText().trim());
31-
mainFont.setFontFamily(sealBuilderToolController.getFontFamilyChoiceBox().getValue());
32-
mainFont.setFontSize(sealBuilderToolController.getFontSizeSpinner().getValue());
33-
mainFont.setFontSpace(sealBuilderToolController.getFontSpaceSpinner().getValue());
34-
mainFont.setMarginSize(sealBuilderToolController.getMarginSizeSpinner().getValue());
35-
mainFont.setIsBold(sealBuilderToolController.getIsBoldCheckBox().isSelected());
36-
SealUtil.SealFont viceFont = new SealUtil.SealFont();
37-
viceFont.setFontText(sealBuilderToolController.getContentTextField1().getText().trim());
38-
viceFont.setFontFamily(sealBuilderToolController.getFontFamilyChoiceBox1().getValue());
39-
viceFont.setFontSize(sealBuilderToolController.getFontSizeSpinner1().getValue());
40-
viceFont.setFontSpace(sealBuilderToolController.getFontSpaceSpinner1().getValue());
41-
viceFont.setMarginSize(sealBuilderToolController.getMarginSizeSpinner1().getValue());
42-
viceFont.setIsBold(sealBuilderToolController.getIsBoldCheckBox1().isSelected());
43-
SealUtil.SealFont titleFont = new SealUtil.SealFont();
44-
titleFont.setFontText(sealBuilderToolController.getContentTextField2().getText().trim());
45-
titleFont.setFontFamily(sealBuilderToolController.getFontFamilyChoiceBox2().getValue());
46-
titleFont.setFontSize(sealBuilderToolController.getFontSizeSpinner2().getValue());
47-
titleFont.setFontSpace(sealBuilderToolController.getFontSpaceSpinner2().getValue());
48-
titleFont.setMarginSize(sealBuilderToolController.getMarginSizeSpinner2().getValue());
49-
titleFont.setIsBold(sealBuilderToolController.getIsBoldCheckBox2().isSelected());
50-
SealUtil.SealFont centerFont = new SealUtil.SealFont();
51-
centerFont.setFontText(sealBuilderToolController.getContentTextField3().getText().trim());
52-
centerFont.setFontFamily(sealBuilderToolController.getFontFamilyChoiceBox3().getValue());
53-
centerFont.setFontSize(sealBuilderToolController.getFontSizeSpinner3().getValue());
54-
centerFont.setFontSpace(sealBuilderToolController.getFontSpaceSpinner3().getValue());
55-
centerFont.setMarginSize(sealBuilderToolController.getMarginSizeSpinner3().getValue());
56-
centerFont.setIsBold(sealBuilderToolController.getIsBoldCheckBox3().isSelected());
57-
58-
BufferedImage bufferedImage = SealUtil.builder()
59-
.size(sealBuilderToolController.getImageSizeSpinner().getValue())
60-
.color(ImgToolUtil.getAwtColor(sealBuilderToolController.getOnColorColorPicker().getValue()))
61-
.borderCircle(borderCircle)
62-
.mainFont(mainFont)
63-
.centerFont(centerFont)
64-
.titleFont(titleFont)
65-
.build()
66-
.draw();
32+
BufferedImage bufferedImage = null;
33+
if (sealBuilderToolController.getSealTypeTabPane().getSelectionModel().getSelectedIndex() == 0) {
34+
SealUtil.SealCircle borderCircle = new SealUtil.SealCircle();
35+
borderCircle.setLineSize(sealBuilderToolController.getLineSizeSpinner().getValue());
36+
borderCircle.setCircleWidth(sealBuilderToolController.getCircleWidthSpinner().getValue());
37+
borderCircle.setCircleHeight(sealBuilderToolController.getCircleHeightSpinner().getValue());
38+
SealUtil.SealFont mainFont = new SealUtil.SealFont();
39+
mainFont.setFontText(sealBuilderToolController.getContentTextField().getText().trim());
40+
mainFont.setFontFamily(sealBuilderToolController.getFontFamilyChoiceBox().getValue());
41+
mainFont.setFontSize(sealBuilderToolController.getFontSizeSpinner().getValue());
42+
mainFont.setFontSpace(sealBuilderToolController.getFontSpaceSpinner().getValue());
43+
mainFont.setMarginSize(sealBuilderToolController.getMarginSizeSpinner().getValue());
44+
mainFont.setIsBold(sealBuilderToolController.getIsBoldCheckBox().isSelected());
45+
SealUtil.SealFont viceFont = new SealUtil.SealFont();
46+
viceFont.setFontText(sealBuilderToolController.getContentTextField1().getText().trim());
47+
viceFont.setFontFamily(sealBuilderToolController.getFontFamilyChoiceBox1().getValue());
48+
viceFont.setFontSize(sealBuilderToolController.getFontSizeSpinner1().getValue());
49+
viceFont.setFontSpace(sealBuilderToolController.getFontSpaceSpinner1().getValue());
50+
viceFont.setMarginSize(sealBuilderToolController.getMarginSizeSpinner1().getValue());
51+
viceFont.setIsBold(sealBuilderToolController.getIsBoldCheckBox1().isSelected());
52+
SealUtil.SealFont titleFont = new SealUtil.SealFont();
53+
titleFont.setFontText(sealBuilderToolController.getContentTextField2().getText().trim());
54+
titleFont.setFontFamily(sealBuilderToolController.getFontFamilyChoiceBox2().getValue());
55+
titleFont.setFontSize(sealBuilderToolController.getFontSizeSpinner2().getValue());
56+
titleFont.setFontSpace(sealBuilderToolController.getFontSpaceSpinner2().getValue());
57+
titleFont.setMarginSize(sealBuilderToolController.getMarginSizeSpinner2().getValue());
58+
titleFont.setIsBold(sealBuilderToolController.getIsBoldCheckBox2().isSelected());
59+
SealUtil.SealFont centerFont = new SealUtil.SealFont();
60+
centerFont.setFontText(sealBuilderToolController.getContentTextField3().getText().trim());
61+
centerFont.setFontFamily(sealBuilderToolController.getFontFamilyChoiceBox3().getValue());
62+
centerFont.setFontSize(sealBuilderToolController.getFontSizeSpinner3().getValue());
63+
centerFont.setFontSpace(sealBuilderToolController.getFontSpaceSpinner3().getValue());
64+
centerFont.setMarginSize(sealBuilderToolController.getMarginSizeSpinner3().getValue());
65+
centerFont.setIsBold(sealBuilderToolController.getIsBoldCheckBox3().isSelected());
66+
bufferedImage = SealUtil.builder()
67+
.size(sealBuilderToolController.getImageSizeSpinner().getValue())
68+
.color(ImgToolUtil.getAwtColor(sealBuilderToolController.getOnColorColorPicker().getValue()))
69+
.borderCircle(borderCircle)
70+
.mainFont(mainFont)
71+
.centerFont(centerFont)
72+
.titleFont(titleFont)
73+
.build()
74+
.draw();
75+
} else {
76+
SealUtil.SealFont mainFont = new SealUtil.SealFont();
77+
mainFont.setFontText(sealBuilderToolController.getContentTextField4().getText().trim());
78+
mainFont.setFontFamily(sealBuilderToolController.getFontFamilyChoiceBox4().getValue());
79+
mainFont.setFontSize(sealBuilderToolController.getFontSizeSpinner4().getValue());
80+
mainFont.setFontSpace(sealBuilderToolController.getFontSpaceSpinner4().getValue());
81+
mainFont.setMarginSize(sealBuilderToolController.getMarginSizeSpinner4().getValue());
82+
mainFont.setIsBold(sealBuilderToolController.getIsBoldCheckBox4().isSelected());
83+
bufferedImage = SealUtil.builder()
84+
.size(sealBuilderToolController.getImageSizeSpinner().getValue())
85+
.color(ImgToolUtil.getAwtColor(sealBuilderToolController.getOnColorColorPicker().getValue()))
86+
.mainFont(mainFont)
87+
.borderSquare(sealBuilderToolController.getLineSizeSpinner3().getValue())
88+
.build()
89+
.draw();
90+
}
6791
Image image = SwingFXUtils.toFXImage(bufferedImage, null);
6892
sealBuilderToolController.getCodeImageView().setImage(image);
6993
}
94+
95+
public void saveAction() {
96+
97+
}
7098
}

src/main/java/com/xwintop/xJavaFxTool/utils/SealUtil.java

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@
1212
import java.awt.image.BufferedImage;
1313
import java.io.File;
1414

15+
/**
16+
* @ClassName: SealUtil
17+
* @Description: 印章生成工具
18+
* @author: xufeng
19+
* @date: 2019/8/12 0012 23:04
20+
*/
21+
1522
@Builder
1623
@Getter
1724
public class SealUtil {
@@ -436,7 +443,7 @@ public BufferedImage draw2() throws Exception {
436443
Graphics2D g2d = bi.createGraphics();
437444

438445
//2.1设置画笔颜色
439-
g2d.setPaint(Color.RED);
446+
g2d.setPaint(color == null ? Color.RED : color);
440447

441448
//2.2抗锯齿设置
442449
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
@@ -450,9 +457,11 @@ public BufferedImage draw2() throws Exception {
450457

451458
if (mainFont.getFontText().length() == 2) {
452459
if (stamp != null && stamp.trim().length() > 0) {
453-
bi = drawThreeFont(bi, g2d, mainFont.append(stamp), borderSquare, size, fixH, fixW, true);
460+
bi = drawThreeFont(bi, g2d, mainFont.append(stamp), borderSquare, size, fixH, fixW, true, color);
454461
} else {
455-
f = new Font(mainFont.getFontFamily(), Font.BOLD, mainFont.getFontSize());
462+
//3.字体样式
463+
int style = mainFont.getIsBold() ? Font.BOLD : Font.PLAIN;
464+
f = new Font(mainFont.getFontFamily(), style, mainFont.getFontSize());
456465
g2d.setFont(f);
457466
rectangle = f.getStringBounds(mainFont.getFontText().substring(0, 1), context);
458467
marginH = (float) (Math.abs(rectangle.getCenterY()) * 2 + marginW) + fixH - 4;
@@ -463,7 +472,7 @@ public BufferedImage draw2() throws Exception {
463472
//拉伸
464473
BufferedImage nbi = new BufferedImage(size, size, bi.getType());
465474
Graphics2D ng2d = nbi.createGraphics();
466-
ng2d.setPaint(Color.RED);
475+
ng2d.setPaint(color == null ? Color.RED : color);
467476
ng2d.drawImage(bi, 0, 0, size, size, null);
468477

469478
//画正方形
@@ -474,12 +483,12 @@ public BufferedImage draw2() throws Exception {
474483
}
475484
} else if (mainFont.getFontText().length() == 3) {
476485
if (stamp != null && stamp.trim().length() > 0) {
477-
bi = drawFourFont(bi, mainFont.append(stamp), borderSquare, size, fixH, fixW);
486+
bi = drawFourFont(bi, mainFont.append(stamp), borderSquare, size, fixH, fixW, color);
478487
} else {
479-
bi = drawThreeFont(bi, g2d, mainFont, borderSquare, size, fixH, fixW, false);
488+
bi = drawThreeFont(bi, g2d, mainFont, borderSquare, size, fixH, fixW, false, color);
480489
}
481490
} else {
482-
bi = drawFourFont(bi, mainFont, borderSquare, size, fixH, fixW);
491+
bi = drawFourFont(bi, mainFont, borderSquare, size, fixH, fixW, color);
483492
}
484493
g2d.dispose();
485494
return bi;
@@ -488,7 +497,7 @@ public BufferedImage draw2() throws Exception {
488497
/**
489498
* 画三字
490499
*/
491-
private static BufferedImage drawThreeFont(BufferedImage bi, Graphics2D g2d, SealFont font, int lineSize, int imageSize, int fixH, int fixW, boolean isWithYin) {
500+
private static BufferedImage drawThreeFont(BufferedImage bi, Graphics2D g2d, SealFont font, int lineSize, int imageSize, int fixH, int fixW, boolean isWithYin, Color color) {
492501
fixH -= 9;
493502
int marginW = fixW + lineSize;
494503
//设置字体
@@ -510,7 +519,7 @@ private static BufferedImage drawThreeFont(BufferedImage bi, Graphics2D g2d, Sea
510519
//拉伸
511520
BufferedImage nbi = new BufferedImage(imageSize, imageSize, bi.getType());
512521
Graphics2D ng2d = nbi.createGraphics();
513-
ng2d.setPaint(Color.RED);
522+
ng2d.setPaint(color == null ? Color.RED : color);
514523
ng2d.drawImage(bi, 0, 0, imageSize, imageSize, null);
515524

516525
//画正方形
@@ -520,7 +529,7 @@ private static BufferedImage drawThreeFont(BufferedImage bi, Graphics2D g2d, Sea
520529
bi = nbi;
521530

522531
g2d = bi.createGraphics();
523-
g2d.setPaint(Color.RED);
532+
g2d.setPaint(color == null ? Color.RED : color);
524533
g2d.setFont(f);
525534
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
526535

@@ -541,12 +550,12 @@ private static BufferedImage drawThreeFont(BufferedImage bi, Graphics2D g2d, Sea
541550
/**
542551
* 画四字
543552
*/
544-
private static BufferedImage drawFourFont(BufferedImage bi, SealFont font, int lineSize, int imageSize, int fixH, int fixW) {
553+
private static BufferedImage drawFourFont(BufferedImage bi, SealFont font, int lineSize, int imageSize, int fixH, int fixW, Color color) {
545554
int marginW = fixW + lineSize;
546555
//拉伸
547556
BufferedImage nbi = new BufferedImage(imageSize, imageSize, bi.getType());
548557
Graphics2D ng2d = nbi.createGraphics();
549-
ng2d.setPaint(Color.RED);
558+
ng2d.setPaint(color == null ? Color.RED : color);
550559
ng2d.drawImage(bi, 0, 0, imageSize, imageSize, null);
551560

552561
//画正方形
@@ -556,11 +565,12 @@ private static BufferedImage drawFourFont(BufferedImage bi, SealFont font, int l
556565
bi = nbi;
557566

558567
Graphics2D g2d = bi.createGraphics();
559-
g2d.setPaint(Color.RED);
568+
g2d.setPaint(color == null ? Color.RED : color);
560569
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
561570
FontRenderContext context = g2d.getFontRenderContext();
562571

563-
Font f = new Font(font.getFontFamily(), Font.BOLD, font.getFontSize());
572+
int style = font.getIsBold() ? Font.BOLD : Font.PLAIN;
573+
Font f = new Font(font.getFontFamily(), style, font.getFontSize());
564574
g2d.setFont(f);
565575
Rectangle2D rectangle = f.getStringBounds(font.getFontText().substring(0, 1), context);
566576
float marginH = (float) (Math.abs(rectangle.getCenterY()) * 2 + marginW) + fixH;

src/main/java/com/xwintop/xJavaFxTool/view/littleTools/SealBuilderToolView.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,18 @@
88
import lombok.Getter;
99
import lombok.Setter;
1010

11+
/**
12+
* @ClassName: SealBuilderToolView
13+
* @Description: 印章生成工具
14+
* @author: xufeng
15+
* @date: 2019/8/12 0012 23:04
16+
*/
17+
1118
@Getter
1219
@Setter
1320
public abstract class SealBuilderToolView implements Initializable {
21+
@FXML
22+
protected TabPane sealTypeTabPane;
1423
@FXML
1524
protected TextField contentTextField;
1625
@FXML
@@ -77,6 +86,22 @@ public abstract class SealBuilderToolView implements Initializable {
7786
protected Spinner<Integer> circleWidthSpinner2;
7887
@FXML
7988
protected Spinner<Integer> circleHeightSpinner2;
89+
90+
@FXML
91+
protected TextField contentTextField4;
92+
@FXML
93+
protected JFXCheckBox isBoldCheckBox4;
94+
@FXML
95+
protected ChoiceBox<String> fontFamilyChoiceBox4;
96+
@FXML
97+
protected Spinner<Integer> fontSizeSpinner4;
98+
@FXML
99+
protected Spinner<Double> fontSpaceSpinner4;
100+
@FXML
101+
protected Spinner<Integer> marginSizeSpinner4;
102+
@FXML
103+
protected Spinner<Integer> lineSizeSpinner3;
104+
80105
@FXML
81106
protected ColorPicker onColorColorPicker;
82107
@FXML
@@ -86,4 +111,4 @@ public abstract class SealBuilderToolView implements Initializable {
86111
@FXML
87112
protected ImageView codeImageView;
88113

89-
}
114+
}

0 commit comments

Comments
 (0)