parent
fedc6e8d2f
commit
0287c1e668
|
After Width: | Height: | Size: 635 B |
@ -0,0 +1,44 @@
|
|||||||
|
import { IEditorOption } from "../../../interface/Editor"
|
||||||
|
import { IRowElement } from "../../../interface/Row"
|
||||||
|
import { Draw } from "../Draw"
|
||||||
|
|
||||||
|
export class PageBreakParticle {
|
||||||
|
|
||||||
|
static readonly font: string = 'Yahei'
|
||||||
|
static readonly fontSize: number = 12
|
||||||
|
static readonly displayName: string = '分页符'
|
||||||
|
static readonly lineDash: number[] = [3, 1]
|
||||||
|
|
||||||
|
private draw: Draw
|
||||||
|
private options: Required<IEditorOption>
|
||||||
|
|
||||||
|
constructor(draw: Draw) {
|
||||||
|
this.draw = draw
|
||||||
|
this.options = draw.getOptions()
|
||||||
|
}
|
||||||
|
|
||||||
|
public render(ctx: CanvasRenderingContext2D, element: IRowElement, x: number, y: number) {
|
||||||
|
const { font, fontSize, displayName, lineDash } = PageBreakParticle
|
||||||
|
const { scale, defaultRowMargin } = this.options
|
||||||
|
const size = fontSize * scale
|
||||||
|
const elementWidth = element.width!
|
||||||
|
const offsetY = this.draw.getDefaultBasicRowMarginHeight() * defaultRowMargin
|
||||||
|
ctx.save()
|
||||||
|
ctx.font = `${size}px ${font}`
|
||||||
|
const textMeasure = ctx.measureText(displayName)
|
||||||
|
const halfX = (elementWidth - textMeasure.width) / 2
|
||||||
|
// 线段
|
||||||
|
ctx.setLineDash(lineDash)
|
||||||
|
ctx.translate(0, 0.5 + offsetY)
|
||||||
|
ctx.beginPath()
|
||||||
|
ctx.moveTo(x, y)
|
||||||
|
ctx.lineTo(x + halfX, y)
|
||||||
|
ctx.moveTo(x + halfX + textMeasure.width, y)
|
||||||
|
ctx.lineTo(x + elementWidth, y)
|
||||||
|
ctx.stroke()
|
||||||
|
// 文字
|
||||||
|
ctx.fillText(displayName, x + halfX, y + textMeasure.actualBoundingBoxAscent - size / 2)
|
||||||
|
ctx.restore()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in new issue