Browse Source

REPORT-8125 水印 设计器配置界面与实 时预览=>核心功能完成

master
plough 7 years ago
parent
commit
45e374c80f
  1. 57
      designer-base/src/com/fr/design/report/WatermarkPreviewPane.java

57
designer-base/src/com/fr/design/report/WatermarkPreviewPane.java

@ -3,15 +3,30 @@ package com.fr.design.report;
import com.fr.base.Watermark; import com.fr.base.Watermark;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
import com.fr.general.FRFont; import com.fr.general.FRFont;
import com.fr.stable.StringUtils;
import javax.swing.JPanel; import javax.swing.JPanel;
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
/** /**
* Created by plough on 2018/5/15. * Created by plough on 2018/5/15.
*/ */
public class WatermarkPreviewPane extends JPanel { public class WatermarkPreviewPane extends JPanel {
Watermark watermark; private static final double SCALE_FACTOR = 3; // 水印层的放大比例
private static final int ROTATE_DEGREE = -20; // 旋转角度
// 绘制水印层的坐标,用来控制图层偏移
private static final int MARK_X = 0;
private static final int MARK_Y = -120;
private int horizontalGap = 20; // 水平间隔(一个中文字符宽度)
private int verticalGap = 40; // 垂直间隔(两个中文字符宽度)
private Watermark watermark;
public WatermarkPreviewPane() { public WatermarkPreviewPane() {
this.watermark = new Watermark(); this.watermark = new Watermark();
@ -26,12 +41,44 @@ public class WatermarkPreviewPane extends JPanel {
super.repaint(); super.repaint();
} }
private void updateGap(FontMetrics fontMetrics) {
horizontalGap = fontMetrics.stringWidth("帆");
verticalGap = horizontalGap * 2;
}
private int getLineHeight() {
return horizontalGap;
}
private BufferedImage paintWatermark() {
int width = (int)(this.getWidth() * SCALE_FACTOR);
int height = (int)(this.getHeight() * SCALE_FACTOR);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics g = image.getGraphics();
g.setColor(watermark.getColor());
g.setFont(FRFont.getInstance().applySize(watermark.getFontSize()));
updateGap(g.getFontMetrics());
for (int y = getLineHeight(); y < height; y += verticalGap) {
for (int x = 0; x < width; x += horizontalGap) {
g.drawString(watermark.getText(), x, y);
x += g.getFontMetrics().stringWidth(watermark.getText());
}
y += getLineHeight();
}
return image;
}
@Override @Override
public void paint(Graphics g) { public void paint(Graphics g) {
super.paint(g); super.paint(g);
g.drawImage(UIConstants.WATERMARK_BACKGROUND, 0, 0, this.getWidth(), this.getHeight(), null); Graphics2D g2d = (Graphics2D)g;
g.setColor(watermark.getColor()); g2d.drawImage(UIConstants.WATERMARK_BACKGROUND, 0, 0, this.getWidth(), this.getHeight(), null);
g.setFont(FRFont.getInstance().applySize(watermark.getFontSize())); BufferedImage markImage = paintWatermark();
g.drawString(watermark.getText(), 20, 20); g2d.rotate(
Math.toRadians(ROTATE_DEGREE),
(double) markImage.getWidth() / 2,
(double) markImage.getHeight() / 2
);
g.drawImage(markImage, MARK_X, MARK_Y, null);
} }
} }

Loading…
Cancel
Save