From 1b1845f9c66e2caf2b3cdc9773104cf1f05330dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E4=BA=91=E9=A3=9E?= Date: Tue, 18 Jan 2022 11:54:35 +0800 Subject: [PATCH 1/2] feat:add watermark --- src/editor/core/draw/Draw.ts | 7 ++++++ src/editor/core/draw/frame/Watermark.ts | 33 +++++++++++++++++++++++++ src/editor/index.ts | 12 ++++++++- src/editor/interface/Editor.ts | 2 ++ src/editor/interface/Watermark.ts | 7 ++++++ src/main.ts | 3 +++ 6 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/editor/core/draw/frame/Watermark.ts create mode 100644 src/editor/interface/Watermark.ts diff --git a/src/editor/core/draw/Draw.ts b/src/editor/core/draw/Draw.ts index daa0967..7303b55 100644 --- a/src/editor/core/draw/Draw.ts +++ b/src/editor/core/draw/Draw.ts @@ -31,6 +31,7 @@ import { Header } from "./frame/Header" import { SuperscriptParticle } from "./particle/Superscript" import { SubscriptParticle } from "./particle/Subscript" import { SeparatorParticle } from "./particle/Separator" +import { Watermark } from "./frame/Watermark" export class Draw { @@ -59,6 +60,7 @@ export class Draw { private tableParticle: TableParticle private tableTool: TableTool private pageNumber: PageNumber + private waterMark: Watermark private header: Header private hyperlinkParticle: HyperlinkParticle private separatorParticle: SeparatorParticle @@ -102,6 +104,7 @@ export class Draw { this.tableParticle = new TableParticle(this) this.tableTool = new TableTool(this) this.pageNumber = new PageNumber(this) + this.waterMark = new Watermark(this) this.header = new Header(this) this.hyperlinkParticle = new HyperlinkParticle(this) this.separatorParticle = new SeparatorParticle() @@ -697,6 +700,10 @@ export class Draw { if (this.searchMatchList) { this.search.render(ctx, pageNo) } + // 绘制水印 + if (this.options.watermark.data) { + this.waterMark.render(ctx) + } } public render(payload?: IDrawOption) { diff --git a/src/editor/core/draw/frame/Watermark.ts b/src/editor/core/draw/frame/Watermark.ts new file mode 100644 index 0000000..9becb98 --- /dev/null +++ b/src/editor/core/draw/frame/Watermark.ts @@ -0,0 +1,33 @@ +import { IEditorOption } from "../../.." +import { DeepRequired } from "../../../interface/Common" +import { Draw } from "../Draw" + +export class Watermark { + + private draw: Draw + private options: DeepRequired + + constructor(draw: Draw) { + this.draw = draw + this.options = >draw.getOptions() + } + + public render(ctx: CanvasRenderingContext2D) { + const { watermark: { data, opacity, font, size, color }, scale } = this.options + const width = this.draw.getWidth() + const height = this.draw.getHeight() + const x = width / 2 + const y = height / 2 + ctx.save() + ctx.globalAlpha = opacity + ctx.font = `${size * scale}px ${font}` + ctx.fillStyle = color + // 移动到中心位置再旋转 + const measureText = ctx.measureText(data) + ctx.translate(x, y) + ctx.rotate(-45 * Math.PI / 180) + ctx.fillText(data, - measureText.width / 2, measureText.actualBoundingBoxAscent - size / 2) + ctx.restore() + } + +} \ No newline at end of file diff --git a/src/editor/index.ts b/src/editor/index.ts index 0098f25..a81a7e8 100644 --- a/src/editor/index.ts +++ b/src/editor/index.ts @@ -16,6 +16,7 @@ import { IContextMenuContext, IRegisterContextMenu } from './interface/contextme import { EditorComponent } from './dataset/enum/Editor' import { EDITOR_COMPONENT } from './dataset/constant/Editor' import { IHeader } from './interface/Header' +import { IWatermark } from './interface/Watermark' export default class Editor { @@ -31,6 +32,14 @@ export default class Editor { font: 'Yahei', ...options.header } + const waterMarkOptions: Required = { + data: '', + color: '#AEB5C0', + opacity: 0.3, + size: 200, + font: 'Yahei', + ...options.watermark + } const editorOptions: Required = { defaultType: 'TEXT', defaultFont: 'Yahei', @@ -62,7 +71,8 @@ export default class Editor { defaultHyperlinkColor: '#0000FF', headerTop: 50, ...options, - header: headerOptions + header: headerOptions, + watermark: waterMarkOptions } formatElementList(elementList) // 监听 diff --git a/src/editor/interface/Editor.ts b/src/editor/interface/Editor.ts index 16f4d02..e52f76b 100644 --- a/src/editor/interface/Editor.ts +++ b/src/editor/interface/Editor.ts @@ -1,5 +1,6 @@ import { IElement } from ".." import { IHeader } from "./Header" +import { IWatermark } from "./Watermark" export interface IEditorOption { defaultType?: string; @@ -32,6 +33,7 @@ export interface IEditorOption { defaultHyperlinkColor?: string; headerTop?: number; header?: IHeader; + watermark?: IWatermark; } export interface IEditorResult { diff --git a/src/editor/interface/Watermark.ts b/src/editor/interface/Watermark.ts new file mode 100644 index 0000000..4be763c --- /dev/null +++ b/src/editor/interface/Watermark.ts @@ -0,0 +1,7 @@ +export interface IWatermark { + data: string; + color?: string; + opacity?: number; + size?: number; + font?: string; +} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index ec08f85..5d6eb76 100644 --- a/src/main.ts +++ b/src/main.ts @@ -211,6 +211,9 @@ window.onload = function () { margins: [100, 120, 100, 120], header: { data: '人民医院门诊' + }, + watermark: { + data: '严禁复制' } }) console.log('实例: ', instance) From 0731d39c1fc882616712d08b5eae99e6a2458d1e Mon Sep 17 00:00:00 2001 From: Hufe921 Date: Wed, 19 Jan 2022 15:03:51 +0800 Subject: [PATCH 2/2] feat:add watermark --- index.html | 9 +++++ src/assets/images/watermark.svg | 1 + src/components/dialog/dialog.css | 1 + src/editor/core/command/Command.ts | 13 ++++++ src/editor/core/command/CommandAdapt.ts | 27 +++++++++++++ src/editor/core/event/CanvasEvent.ts | 3 +- src/editor/dataset/constant/Header.ts | 8 ++++ src/editor/dataset/constant/Watermark.ts | 9 +++++ src/editor/index.ts | 13 ++---- src/editor/interface/Editor.ts | 1 + src/main.ts | 50 +++++++++++++++++++++++- src/style.css | 8 ++++ 12 files changed, 132 insertions(+), 11 deletions(-) create mode 100644 src/assets/images/watermark.svg create mode 100644 src/editor/dataset/constant/Header.ts create mode 100644 src/editor/dataset/constant/Watermark.ts diff --git a/index.html b/index.html index 72c5e9e..e687f0a 100644 --- a/index.html +++ b/index.html @@ -145,6 +145,15 @@ +