Class DrawContext

java.lang.Object
org.ofdrw.layout.element.canvas.DrawContext
All Implemented Interfaces:
Closeable, AutoCloseable

public class DrawContext extends Object implements Closeable
绘制器绘制上下文

上下文中提供系列的绘制方法供绘制

一个路径对象只允许出现一种描边和填充颜色 重复设置,取最后一次设置的颜色。

关于路径: 1. beginPath 清空路径。 2. 所有路径在 fill 和 stroke 是才应用图元效果。 3. 路径数据 与 绘图数据分开。 4. 除了 beginPath 之外所有数据均认为是 向已经存在的路径追加新的路径。

Since:
2020-05-01 11:29:20
Author:
权观宇
  • Field Details

    • fillStyle

      public Object fillStyle
      填充颜色

      支持:

      String 16进制颜色值,#000000、rgb(0,0,0)、rgba(0,0,0,1)

      CT_Color OFD颜色对象

      ColorClusterType 颜色族

      CanvasPattern 图案

      CanvasGradient 渐变

      CanvasRadialGradient 径向渐变

    • strokeStyle

      public Object strokeStyle
      描边颜色

      支持:

      String 16进制颜色值,#000000、rgb(0,0,0)、rgba(0,0,0,1)

      CT_Color OFD颜色对象

      ColorClusterType 颜色族

      CanvasPattern 图案

      CanvasGradient 渐变

      CanvasRadialGradient 径向渐变

    • font

      public String font
      字体描述 格式与CSS3格式一致

      [font-style] [font-weight] font-size font-family

      它必需包含 font-size font-family,[]内容为可选

      详见 https://developer.mozilla.org/en-US/docs/Web/CSS/font

      font-style: normal | italic

      font-weight: normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900

      font-size: 12px | 3.17mm (默认单位为 mm)

      font-family: 宋体 | SimSun | Times New Roman | Times | serif | sans-serif | monospace | cursive | fantasy

      font-family 为必选项,其他为可选项

      font-size 和 line-height 可以使用 px 或 mm 作为单位,若不指定单位则默认为 mm

      锚点: - fillText - measureText

    • PPM

      public double PPM
      每毫米像素数量 pixel per millimeter
  • Constructor Details

    • DrawContext

      public DrawContext(org.ofdrw.core.basicStructure.pageObj.layer.block.CT_PageBlock container, org.ofdrw.core.basicType.ST_Box boundary, AtomicInteger maxUnitID, ResManager resManager)
      创建绘制上下文
      Parameters:
      container - 绘制内容缩所放置容器
      boundary - 画布大小以及位置
      maxUnitID - 自增的对象ID
      resManager - 资源管理器
  • Method Details

    • beginPath

      public DrawContext beginPath()
      开启一段新的路径

      如果已经存在路径,那么将会清除已经存在的所有路径。

      Returns:
      this
    • closePath

      public DrawContext closePath()
      关闭路径

      如果路径存在描边或者填充,那么改路径将会被加入到图形容器中进行渲染

      路径关闭后将会清空上下文中的路径对象

      Returns:
      this
    • clip

      public DrawContext clip()
      从原始画布中剪切任意形状和尺寸

      裁剪路径以当前的路径作为裁剪参数

      裁剪区域受变换矩阵影响

      Returns:
      this
    • moveTo

      public DrawContext moveTo(double x, double y)
      移动绘制点到指定位置
      Parameters:
      x - X坐标
      y - Y坐标
      Returns:
      this
    • lineTo

      public DrawContext lineTo(double x, double y)
      从当前点连线到指定点

      请在调用前创建路径

      Parameters:
      x - X坐标
      y - Y坐标
      Returns:
      this
    • quadraticCurveTo

      public DrawContext quadraticCurveTo(double cpx, double cpy, double x, double y)
      通过二次贝塞尔曲线的指定控制点,向当前路径添加一个点。
      Parameters:
      cpx - 贝塞尔控制点的 x 坐标
      cpy - 贝塞尔控制点的 y 坐标
      x - 结束点的 x 坐标
      y - 结束点的 y 坐标
      Returns:
      this
    • bezierCurveTo

      public DrawContext bezierCurveTo(double cp1x, double cp1y, double cp2x, double cp2y, double x, double y)
      方法三次贝塞尔曲线的指定控制点,向当前路径添加一个点。
      Parameters:
      cp1x - 第一个贝塞尔控制点的 x 坐标
      cp1y - 第一个贝塞尔控制点的 y 坐标
      cp2x - 第二个贝塞尔控制点的 x 坐标
      cp2y - 第二个贝塞尔控制点的 y 坐标
      x - 结束点的 x 坐标
      y - 结束点的 y 坐标
      Returns:
      this
    • arc

      public DrawContext arc(double a, double b, double angle, boolean large, boolean sweep, double x, double y)
      从当前点连接到点(x,y)的圆弧,并将当前点移动到点(x,y)。 rx 表示椭圆的长轴长度,ry 表示椭圆的短轴长度。angle 表示 椭圆在当前坐标系下旋转的角度,正值为顺时针,负值为逆时针, large 为 1 时表示对应度数大于180°的弧,为 0 时表示对应 度数小于 180°的弧。sweep 为 1 时表示由圆弧起始点到结束点 是顺时针旋转,为 0 时表示由圆弧起始点到结束点是逆时针旋转。
      Parameters:
      a - 椭圆长轴长度
      b - 椭圆短轴长度
      angle - 旋转角度,正值 - 顺时针,负值 - 逆时针
      large - true表示对应度数大于 180°的弧,false 表示对应度数小于 180°的弧
      sweep - sweep true 表示由圆弧起始点到结束点是顺时针旋转,false表示由圆弧起始点到结束点是逆时针旋转。
      x - 目标点 x
      y - 目标点 y
      Returns:
      this
    • arc

      public DrawContext arc(double x, double y, double r, double sAngle, double eAngle, boolean counterclockwise)
      创建弧/曲线(用于创建圆或部分圆)
      Parameters:
      x - 圆的中心的 x 坐标。
      y - 圆的中心的 y 坐标。
      r - 圆的半径。
      sAngle - 起始角,单位度(弧的圆形的三点钟位置是 0 度)。
      eAngle - 结束角,单位度
      counterclockwise - 规定应该逆时针还是顺时针绘图。false = 顺时针,true = 逆时针。
      Returns:
      this
    • arc

      public DrawContext arc(double x, double y, double r, double sAngle, double eAngle)
      创建弧/曲线(用于创建圆或部分圆)

      默认顺时针方向

      Parameters:
      x - 圆的中心的 x 坐标。
      y - 圆的中心的 y 坐标。
      r - 圆的半径。
      sAngle - 起始角,单位度(弧的圆形的三点钟位置是 0 度)。
      eAngle - 结束角,单位度
      Returns:
      this
    • rect

      public DrawContext rect(double x, double y, double width, double height)
      创建矩形路径
      Parameters:
      x - 左上角X坐标
      y - 左上角Y坐标
      width - 宽度
      height - 高度
      Returns:
      this
    • fillRect

      public DrawContext fillRect(double x, double y, double width, double height)
      创建并填充矩形路径

      填充矩形不会导致影响上下文中的路径。

      如果已经存在路径那么改路径将会提前关闭,并创建新的路径。

      Parameters:
      x - 左上角X坐标
      y - 左上角Y坐标
      width - 宽度
      height - 高度
      Returns:
      this
    • strokeRect

      public DrawContext strokeRect(double x, double y, double width, double height)
      创建并描边矩形路径

      描边矩形不会导致影响上下文中的路径。

      默认描边颜色为黑色

      Parameters:
      x - 左上角X坐标
      y - 左上角Y坐标
      width - 宽度
      height - 高度
      Returns:
      this
    • stroke

      public DrawContext stroke()
      绘制已定义的路径
      Returns:
      this
    • fill

      public DrawContext fill()
      填充已定义路径

      默认的填充颜色是黑色。

      Returns:
      this
    • scale

      public DrawContext scale(double scalewidth, double scaleheight)
      缩放当前绘图,更大或更小
      Parameters:
      scalewidth - 缩放当前绘图的宽度 (1=100%, 0.5=50%, 2=200%, 依次类推)
      scaleheight - 缩放当前绘图的高度 (1=100%, 0.5=50%, 2=200%, 依次类推)
      Returns:
      this
    • rotate

      public DrawContext rotate(double angle)
      旋转当前的绘图
      Parameters:
      angle - 旋转角度(0~360)
      Returns:
      this
    • translate

      public DrawContext translate(double x, double y)
      重新映射画布上的 (0,0) 位置
      Parameters:
      x - 添加到水平坐标(x)上的值
      y - 添加到垂直坐标(y)上的值
      Returns:
      this
    • transform

      public DrawContext transform(double a, double b, double c, double d, double e, double f)
      变换矩阵

      每次变换矩阵都会在前一个变换的基础上进行

      Parameters:
      a - 水平缩放绘图
      b - 水平倾斜绘图
      c - 垂直倾斜绘图
      d - 垂直缩放绘图
      e - 水平移动绘图
      f - 垂直移动绘图
      Returns:
      this
    • setTransform

      public DrawContext setTransform(double a, double b, double c, double d, double e, double f)
      设置变换矩阵

      每当调用 setTransform() 时,它都会重置前一个变换矩阵然后构建新的矩阵

      Parameters:
      a - 水平缩放绘图
      b - 水平倾斜绘图
      c - 垂直倾斜绘图
      d - 垂直缩放绘图
      e - 水平移动绘图
      f - 垂直移动绘图
      Returns:
      this
    • drawImage

      public DrawContext drawImage(Path img, double sx, double sy, double sWidth, double sHeight, double dx, double dy, double dWidth, double dHeight) throws IOException
      裁剪图片并在OFD上绘制图像

      主要该方法将会裁剪图片的一部分,然后在OFD上绘制 该方法所有参数单位都是毫米mm,像素转换毫米需要通过 PPM 转换。

      Parameters:
      img - 图像,路径
      sx - 图像内部 x 坐标(单位 毫米mm)
      sy - 图像内部 y 坐标(单位 毫米mm)
      sWidth - 图像内部宽度(单位 像素px)
      sHeight - 图像内部高度(单位 像素px)
      dx - 在画布上放置图像的 x 坐标位置(单位 毫米mm)
      dy - 在画布上放置图像的 y 坐标位置(单位 毫米mm)
      dWidth - 在画布上放置图像的宽度(单位 毫米mm)
      dHeight - 在画布上放置图像的高度(单位 毫米mm)
      Returns:
      this
      Throws:
      IOException - 图像读取异常
    • drawImage

      public DrawContext drawImage(Path img, double dx, double dy) throws IOException
      在OFD上绘制图像

      图像宽度和高度将按照 PPM 进行转换

      Parameters:
      img - 要使用的图像,请避免资源和文档中已经存在的资源重复
      dx - 在画布上放置图像的 x 坐标位置
      dy - 在画布上放置图像的 y 坐标位置
      Returns:
      this
      Throws:
      IOException - 图片文件读写异常
    • drawImage

      public DrawContext drawImage(Path img, double dx, double dy, double dWidth, double dHeight) throws IOException
      在OFD上绘制图像
      Parameters:
      img - 要使用的图像,请避免资源和文档中已经存在的资源重复
      dx - 在画布上放置图像的 x 坐标位置
      dy - 在画布上放置图像的 y 坐标位置
      dWidth - 要使用的图像的宽度(伸展或缩小图像)
      dHeight - 要使用的图像的高度(伸展或缩小图像)
      Returns:
      this
      Throws:
      IOException - 图片文件读写异常
    • save

      public DrawContext save()
      保存当前绘图状态

      restore() 总是成对出现。

      Returns:
      this
    • restore

      public DrawContext restore()
      还原绘图状态

      save() 总是成对出现。

      Returns:
      this
    • fillText

      public DrawContext fillText(String text, double x, double y) throws IOException
      填充文字
      Parameters:
      text - 填充文字
      x - 阅读方向上的左下角 x坐标
      y - 阅读方向上的左下角 y坐标
      Returns:
      this
      Throws:
      IOException - 字体获取异常
    • getTextAlign

      public TextAlign getTextAlign()
      获取文本对齐方式
      Returns:
      文本对齐方式
    • setTextAlign

      public DrawContext setTextAlign(TextAlign textAlign)
      设置文本对齐方式
      Parameters:
      textAlign - 文本对齐方式
      Returns:
      this
    • measureText

      public TextMetrics measureText(String text)
      测量文本的宽度或高度

      如果 readDirection为 0或180,测量文本宽度

      如果 readDirection为 0或180,测量文本高度

      Parameters:
      text - 带测量文本
      Returns:
      测量文本信息
    • measureTextArea

      public TextMetricsArea measureTextArea(String text)
      测量文本所占空间大小
      Parameters:
      text - 带测量文本
      Returns:
      文件所占空间信息
    • getStrokeColor

      public int[] getStrokeColor()
      读取当前描边颜色(只读)

      若描边颜色非颜色值,则返回null

      Returns:
      描边颜色(只读)
    • setStrokeColor

      public DrawContext setStrokeColor(int[] strokeColor)
      设置描边颜色

      一条路径只有一种描边颜色,重复设置只取最后一次设置颜色

      Parameters:
      strokeColor - 描边的RGB颜色
      Returns:
      this
    • setStrokeColor

      public DrawContext setStrokeColor(int r, int g, int b)
      设置描边颜色

      一条路径只有一种描边颜色,重复设置只取最后一次设置颜色

      Parameters:
      r - 红
      g - 绿
      b - 蓝
      Returns:
      this
    • getFillColor

      public int[] getFillColor()
      获取填充颜色(只读)

      若填充颜色非颜色值,则返回null

      Returns:
      填充颜色(只读)
    • setFillColor

      public DrawContext setFillColor(int[] fillColor)
      设置填充颜色

      一条路径只有一种填充颜色,重复设置只取最后一次设置颜色

      Parameters:
      fillColor - 填充颜色
      Returns:
      this
    • setFillColor

      public DrawContext setFillColor(int r, int g, int b)
      设置填充颜色

      一条路径只有一种填充颜色,重复设置只取最后一次设置颜色

      Parameters:
      r - 红
      g - 绿
      b - 蓝
      Returns:
      this
    • getLineWidth

      public double getLineWidth()
      获取当前线宽度
      Returns:
      线宽度(单位毫米mm)
    • setLineWidth

      public DrawContext setLineWidth(double lineWidth)
      获取当前线宽度
      Parameters:
      lineWidth - 线宽度(单位毫米mm)
      Returns:
      this
    • getFont

      public FontSetting getFont()
      获取当前使用的绘制文字设置
      Returns:
      绘制文字设置,可能为null
    • setFont

      public DrawContext setFont(FontSetting font)
      设置绘制文字信息
      Parameters:
      font - 文字配置
      Returns:
      this
    • setDefaultFont

      public DrawContext setDefaultFont(double fontSize)
      设置默认字体
      Parameters:
      fontSize - 字体大小
      Returns:
      this
    • getGlobalAlpha

      public Double getGlobalAlpha()
      获取绘图透明度值
      Returns:
      透明度值 0.0到1.0
    • setGlobalAlpha

      public DrawContext setGlobalAlpha(Double globalAlpha)
      设置 绘图透明度值
      Parameters:
      globalAlpha - 透明度值 0.0到1.0
      Returns:
      this
    • setLineCap

      public DrawContext setLineCap(org.ofdrw.core.pageDescription.drawParam.LineCapType cap)
      设置端点样式

      默认值: LineCapType.Butt

      Parameters:
      cap - 端点样式
      Returns:
      this
    • getLineCap

      public org.ofdrw.core.pageDescription.drawParam.LineCapType getLineCap()
      设置端点样式

      默认值: LineCapType.Butt

      Returns:
      端点样式
    • setLineJoin

      public DrawContext setLineJoin(org.ofdrw.core.pageDescription.drawParam.LineJoinType join)
      设置线条连接样式,指定了两个线的端点结合时采用的样式。

      默认值:LineJoinType.Miter

      Parameters:
      join - 线条连接样式
      Returns:
      this
    • getLineJoin

      public org.ofdrw.core.pageDescription.drawParam.LineJoinType getLineJoin()
      获取线条连接样式

      默认值:LineJoinType.Miter

      Returns:
      线条连接样式
    • setMiterLimit

      public DrawContext setMiterLimit(Double miterLimit)
      设置最大斜接长度,也就是结合点长度截断值

      默认值:3.528

      当Join不等于Miter时改参数无效

      Parameters:
      miterLimit - 截断值
      Returns:
      this
    • getMiterLimit

      public Double getMiterLimit()
      获取最大斜接长度,也就是结合点长度截断值

      默认值:3.528

      Returns:
      截断值
    • setLineDash

      public DrawContext setLineDash(Double dashOffset, Double[] pattern)
      设置线段虚线样式
      Parameters:
      dashOffset - 虚线绘制偏移位置,如果没有则传入null
      pattern - 虚线的线段长度和间隔长度,有两个或多个值,第一个值指定了虚线线段的长度,第二个值制定了线段间隔的长度,依次类推。
      Returns:
      this
    • setLineDash

      public DrawContext setLineDash(Double... pattern)
      设置线段虚线样式
      Parameters:
      pattern - 虚线的线段长度和间隔长度,有两个或多个值,第一个值指定了虚线线段的长度,第二个值制定了线段间隔的长度,依次类推。
      Returns:
      this
    • getDashPattern

      public org.ofdrw.core.basicType.ST_Array getDashPattern()
      获取虚线间隔参数
      Returns:
      虚线的线段长度和间隔长度, 有两个或多个值,第一个值指定了虚线线段的长度,第二个值制定了线段间隔的长度,依次类推。
    • getDashOffset

      public Double getDashOffset()
      获取虚线绘制偏移位置
      Returns:
      虚线绘制偏移位置
    • createLinearGradient

      public CanvasGradient createLinearGradient(double x0, double y0, double x1, double y1)
      创建一个线性渐变对象(double)
      Parameters:
      x0 - 起始点横坐标
      y0 - 起始点纵坐标
      x1 - 结束点横坐标
      y1 - 结束点纵坐标
      Returns:
      线性渐变对象
    • createLinearGradient

      public CanvasGradient createLinearGradient(int x0, int y0, int x1, int y1)
      创建一个线性渐变对象(int)
      Parameters:
      x0 - 起始点横坐标
      y0 - 起始点纵坐标
      x1 - 结束点横坐标
      y1 - 结束点纵坐标
      Returns:
      线性渐变对象
    • createPattern

      public CanvasPattern createPattern(Path img, String repetition) throws IOException
      创建一个重复底纹

      注意:默认情况下使用 mm(int) 将图片像素转换为OFD的单位毫米。 若有自定义重复图片大小设置可以使用 CanvasPattern.setImageSize(double, double)

      Parameters:
      img - 底纹图片路径
      repetition - 重复方式,支持 repeat、column、row、row-column
      Returns:
      底纹对象
      Throws:
      IOException - 图片读取异常
    • createRadialGradient

      public CanvasRadialGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1)
      创建径向渐变颜色
      Parameters:
      x0 - 渐变的开始圆的 x 坐标
      y0 - 渐变的开始圆的 y 坐标
      r0 - 开始圆的半径
      x1 - 渐变的结束圆的 x 坐标
      y1 - 渐变的结束圆的 y 坐标
      r1 - 结束圆的半径
      Returns:
      径向渐变颜色
    • transform

      public static void transform(org.ofdrw.core.graph.pathObj.AbbreviatedData data, org.ofdrw.core.basicType.ST_Array ctm)
      对路径应用变换矩阵
      Parameters:
      data - 图形轮廓数据
      ctm - 变换矩阵
    • mm

      public double mm(int pixel)
      像素转换为毫米
      Parameters:
      pixel - 像素
      Returns:
      毫米
    • pixel

      public int pixel(double mm)
      毫米转换为像素
      Parameters:
      mm - 毫米
      Returns:
      像素
    • addFont

      public DrawContext addFont(String name, Path p) throws IOException
      添加字体至文档资源中
      Parameters:
      name - 字体名称
      p - 字体文件路径
      Returns:
      this
      Throws:
      IOException - 字体解析异常
    • close

      public void close()
      结束绘制器绘制工作
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable