本章节介绍OFD中基础的图形绘制相关操作,主要包括了线、矩形、圆和椭圆。也预留了接口支持特殊图形。
注意:本文中所有的单位都MM。
我们先利用easyofd的线功能,绘制一把尺子测量A4纸张。
public CTPageBlock.PathObject addLine(double x1, double y1, double x2, double y2)
x1
- 开始X坐标y1
- 开始Y坐标x2
- 结束X坐标y2
- 结束Y坐标以下代码从 0,100 的开始坐标 到 210 ,100的结束坐标画一条直线
// 1 创建一个OFD文档
OFDocument ofDocument = new OFDocument();
// 2 创建一页
OFDPage page = new OFDPage(ofDocument);
ofDocument.addPage(page);
// 3 增加一条线
page.addLine(0,100,210,100);
// 4 保存
OutputStream os =new FileOutputStream("XML/path/lines.ofd");
ofDocument.save(os);
利用本方法就可以快速完成标尺的绘制工作,主要代码如下:
page.addLine(0,100,210,100);
//X轴刻度
for(int n=0;n<=210/10;n++)
{
page.addLine(n*10,100,n*10,102);
page.addText((n*10)+"",n*10,110);
}
page.addLine(50,0,50,300);
//Y轴刻度
for(int n=0;n<=300/10;n++)
{
page.addLine(50,n*10,52,n*10);
page.addText((n*10)+"",55, n*10+1);
}
OFD软件展示结果如下图:
完整代码
public CTPageBlock.PathObject addLine(double x1, double y1, double x2, double y2, CTColor color)
x1
- 开始X坐标y1
- 开始Y坐标x2
- 结束X坐标y2
- 结束Y坐标color
- 颜色样例代码如下:
//线宽 颜色
CTColor color=new CTColor();
color.setValue("255 0 0");
page.addLine(10,10,100,10,2.0,color);
public CTPageBlock.PathObject addLine(double x1, double y1, double x2, double y2, java.lang.Double lineWidth, CTColor color)
x1
- 开始X坐标y1
- 开始Y坐标x2
- 结束X坐标y2
- 结束Y坐标lineWidth
- 线宽,非负浮点数,指定了路径绘制时线的宽度。默认值为 0.353(相当于 1 磅)color
- 颜色样例代码如下:
//线宽 颜色
CTColor color=new CTColor();
color.setValue("255 0 0");
page.addLine(10,10,100,10,2.0,color);
public CTPageBlock.PathObject addLine(double x1, double y1, double x2, double y2, java.lang.Double lineWidth, CTColor color, java.lang.Double dashOffset, java.lang.String dashPattern, java.lang.String cap)
x1
- 开始X坐标y1
- 开始Y坐标x2
- 结束X坐标y2
- 结束Y坐标lineWidth
- 线宽,非负浮点数,指定了路径绘制时线的宽度。默认值为 0.353(相当于 1 磅)color
- 颜色dashOffset
- 虚线重复样式开始的位置,默认值为 0。当 DashPattern 不出现时,该参数无效dashPattern
- 虚线的重复样式。默认值为空。虚线样式的控制效果见表 21cap
- 线端点样式,枚举值,指定了一条线的端点样式。 可取值为: Butt Round Square 默认值为 Butt 样例代码如下:
//测试 20 线
//虚线
CTColor color2=new CTColor();
color2.setValue("255 0 255");
page.addLine(10,20,100,20,2.0,color2,null,"10 10",null);
//测试 30 线
page.addLine(10,30,100,30,2.0,null,5.0,"10 10",null);
dashOffset 和 dashPattern 样式可以参考:wiki.easyofd.cn/OFD标准/页面描述#DashPattern
绘制方法同2.3线的虚线的重复样式。
样例代码如下:
//测试 40 线
page.addLine(50,40,70,40,2.0,null,null,null,"Round");
page.addLine(50,50,70,50,2.0,null,null,null,"Square");
page.addLine(50,60,70,60,2.0,null,null,null,null);
cap 线端点样式样式可以参考: wiki.easyofd.cn/OFD标准/页面描述#Linecap
因上述线段都是一个独立的单元,因此线段的连接是不起作用的,
解决方式一:通过三、绘制矩形解决
解决方式二:需要使用原始的方法,把需呀连接的线段组合在一个绘制路径内。下面的例子通过指定AbbreviatedData和 boundary来完成线的连接设置。
方式二样例代码如下:
//线条连接样式 Linejoin
// 因为是独立的两个线段,所有不会有效果,解决路径 一 通过矩形 二 自己设置绘制的path内容,都在一个path内设置有效
CTBoundary boundary=new CTBoundary(0,0,100,100);
//测试 70 线
String abbreviatedData= "M 65 75 L 70 70 L 75 75" ;
CTPageBlock.PathObject pathObject= page.addPathObject(abbreviatedData,boundary);
pathObject.setJoin("Round");
pathObject.setLineWidth(2.0);
abbreviatedData= "M 75 85 L 80 80 L 85 85" ;
CTPageBlock.PathObject pathObject2= page.addPathObject(abbreviatedData,boundary);
pathObject2.setJoin("Bevel");
pathObject2.setLineWidth(2.0);
AbbreviatedData的具体内容可以参考: wiki.easyofd.cn/OFD标准/图形
基本矩形绘制方法及参数如下:
public CTPageBlock.PathObject addSquare(int x, int y, int w, int h)
x
- 开始X坐标y
- 开始Y坐标w
- 宽度h
- 高度样例代码如下:
page.addSquare(20,15,100,10);
设置参数addSquare的fillColor,就可以对矩形内进行填充。矩形填充的绘制方法及参数如下:
public CTPageBlock.PathObject addSquare(int x, int y, int w, int h, CTColor strokeColor, CTColor fillColor)
x
- 开始X坐标y
- 开始Y坐标w
- 宽度h
- 高度strokeColor
- 颜色fillColor
- 填充颜色样例代码如下:
CTColor color2=new CTColor();
color2.setValue("255 0 255");
page.addSquare(20,30,100,10,null,color2);
设置参数addSquare的strokeColor,就可以对矩形线的颜色进行设置。矩形线颜色绘制方法及参数同3.2:
样例代码如下:
CTColor color=new CTColor();
color.setValue("255 0 0");
page.addSquare(20,45,100,10,color,null);
参数fdashOffset 和 dashPattern可以设置矩形线样式。
public CTPageBlock.PathObject addSquare(int x, int y, int w, int h, CTColor strokeColor, CTColor fillColor, java.lang.Double lineWidth, java.lang.Double dashOffset, java.lang.String dashPattern)
x
- 开始X坐标y
- 开始Y坐标w
- 宽度h
- 高度strokeColor
- 颜色fillColor
- 填充颜色lineWidth
- 线宽,非负浮点数,指定了路径绘制时线的宽度。默认值为 0.353(相当于 1 磅)dashOffset
- 虚线重复样式开始的位置,默认值为 0。当 DashPattern 不出现时,该参数无效dashPattern
- 虚线的重复样式。默认值为空。虚线样式的控制效果见表 21样例代码如下:
page.addSquare(20,60,100,10,color,null,2.5,0.0,"5 5");
dashOffset 和 dashPattern 样式可以参考:wiki.easyofd.cn/OFD标准/页面描述#DashPattern
参数dashOffset和dashPattern可以设置矩形线连接样式。
public CTPageBlock.PathObject addSquare(int x, int y, int w, int h, CTColor strokeColor, CTColor fillColor, java.lang.Double lineWidth, java.lang.Double dashOffset, java.lang.String dashPattern, java.lang.String cap, java.lang.String join, java.lang.Double miterLimit)
x
- 开始X坐标y
- 开始Y坐标w
- 宽度h
- 高度strokeColor
- 颜色fillColor
- 填充颜色lineWidth
- 线宽,非负浮点数,指定了路径绘制时线的宽度。默认值为 0.353(相当于 1 磅)dashOffset
- 虚线重复样式开始的位置,默认值为 0。当 DashPattern 不出现时,该参数无效dashPattern
- 虚线的重复样式。默认值为空。虚线样式的控制效果见表 21cap
- 线端点样式,枚举值,指定了一条线的端点样式。 可取值为: Butt Round Square 默认值为 Buttjoin
- 线条连接样式,指定了两个线的端点结合时采用的样式 可取值为:Miter Round Bevel 默认值为 MitermiterLimit
- Join 为 Miter 时小角度结合长度点的的截断值,默认值为 3.528。当 Join 不等于 Miter 时该参数无效样例代码如下:
page.addSquare(20,80,100,10,color,null,3.0,0.0,null,null,"Round",null);
page.addSquare(20,100,100,10,color,null,3.0,0.0,null,null,"Bevel",null);
join 线条连接样式可以参考: wiki.easyofd.cn/OFD标准/页面描述#Linejoin
cap 线端点样式样式可以参考: wiki.easyofd.cn/OFD标准/页面描述#Linecap
miterLimit 截断值可以参考: wiki.easyofd.cn/OFD标准/页面描述#Miterlimit
绘制圆的基本参数就是圆心和半径。
public CTPageBlock.PathObject addCircle(double x, double y, double r)
x
- 原点X坐标y
- 原点Y坐标r
- 半径样例代码如下:
page.addCircle(45,20,15);
参数fillColor可以设置圆的圆填充颜色。
public CTPageBlock.PathObject addCircle(double x, double y, double r, CTColor strokeColor, CTColor fillColor)
x
- 原点X坐标y
- 原点Y坐标r
- 半径strokeColor
- 颜色fillColor
- 填充颜色样例代码如下:
CTColor color=new CTColor();
color.setValue("255 0 0");
page.addCircle(45,100,15,null,color);
设置参数addCircle的strokeColor,就可以对圆形线的颜色进行设置。矩形线颜色绘制方法及参数同4.2:
样例代码如下:
CTColor color=new CTColor();
color.setValue("255 0 0");
page.addCircle(45,60,15,color,null);
参数dashOffset和dashPattern可以设置圆的线样式。
public CTPageBlock.PathObject addCircle(double x, double y, double r, CTColor strokeColor, CTColor fillColor, java.lang.Double lineWidth, java.lang.Double dashOffset, java.lang.String dashPattern)
x
- 原点X坐标y
- 原点Y坐标r
- 半径strokeColor
- 颜色fillColor
- 填充颜色lineWidth
- 线宽,非负浮点数,指定了路径绘制时线的宽度。默认值为 0.353(相当于 1 磅)dashOffset
- 虚线重复样式开始的位置,默认值为 0。当 DashPattern 不出现时,该参数无效dashPattern
- 虚线的重复样式。默认值为空。虚线样式的控制效果见表 21样例代码如下:
page.addCircle(45,140,15,null,null,2.0,null,"1 1");
dashOffset 和 dashPattern 样式可以参考:wiki.easyofd.cn/OFD标准/页面描述#DashPattern
只需要调用page的addPentagram方法,就可以很轻松的绘制一个五角星。该方法的参数分别是的圆心位置和半径。
public CTPageBlock.PathObject addPentagram(double x, double y, double r, CTColor fillColor)
x
- x 圆心X坐标y
- y 圆心Y坐标r
- 半径fillColor
- 填充颜色样例代码如下:
CTColor color=new CTColor();
color.setValue("255 0 0");
page.addCircle(140,50,20);
CTPageBlock.PathObject pathObject=page.addPentagram(140,50,20,color);
pathObject.setStroke(false);
与圆类似,椭圆也是需要椭圆的圆心 、椭圆的长轴和椭圆的短轴。
public CTPageBlock.PathObject addEllipse(double x, double y, double a, double b, java.lang.Double lineWidth)
x
- 原点X坐标y
- 原点Y坐标a
- 表示椭圆的长轴长度,b
- 表示椭圆的短轴长度。lineWidth
- 线宽,非负浮点数,指定了路径绘制时线的宽度。默认值为 0.353(相当于 1 磅)样例代码如下:
page.addEllipse(45,20,15,15,null);
参数strokeColor可以设置椭圆填充颜色。
public CTPageBlock.PathObject addEllipse(double x, double y, double a, double b, java.lang.Double lineWidth, CTColor strokeColor, CTColor fillColor)
x
- 原点X坐标y
- 原点Y坐标a
- 表示椭圆的长轴长度,b
- 表示椭圆的短轴长度。lineWidth
- 线宽,非负浮点数,指定了路径绘制时线的宽度。默认值为 0.353(相当于 1 磅)strokeColor
- 颜色fillColor
- 填充颜色样例代码如下:
CTColor color=new CTColor();
color.setValue("255 0 0");
page.addEllipse(45,90,30,15,null,null,color);
参数strokeColor可以设置椭圆线颜色。
样例代码如下:
page.addEllipse(45,60,30,15,null,color,null);
参数dashOffset和dashPattern可以设置椭圆的线样式。
public CTPageBlock.PathObject addEllipse(double x, double y, double a, double b, CTColor strokeColor, CTColor fillColor, java.lang.Double lineWidth, java.lang.Double dashOffset, java.lang.String dashPattern)
x
- 原点X坐标y
- 原点Y坐标a
- 表示椭圆的长轴长度,b
- 表示椭圆的短轴长度。strokeColor
- 颜色fillColor
- 填充颜色lineWidth
- 线宽,非负浮点数,指定了路径绘制时线的宽度。默认值为 0.353(相当于 1 磅)dashOffset
- 虚线重复样式开始的位置,默认值为 0。当 DashPattern 不出现时,该参数无效dashPattern
- 虚线的重复样式。默认值为空。虚线样式的控制效果见表 21样例代码如下:
page.addEllipse(45,120,30,15,null,null,2.0,null,"1 1");
dashOffset 和 dashPattern 样式可以参考:wiki.easyofd.cn/OFD标准/页面描述#DashPattern
样例代码如下:
page.addEllipse(145,40,15,30,null);
在2.5 线的连接章节我们其实已经介绍了绘制思路。
需要使用原始的方法,把需呀连接的线段组合在一个绘制路径内。下面的例子通过指定AbbreviatedData和 boundary来完成线的连接设置。
//线条连接样式 Linejoin
// 因为是独立的两个线段,所有不会有效果,解决路径 一 通过矩形 二 自己设置绘制的path内容,都在一个path内设置有效
CTBoundary boundary=new CTBoundary(0,0,100,100);
//测试 70 线
String abbreviatedData= "M 65 75 L 70 70 L 75 75 C" ;
CTPageBlock.PathObject pathObject= page.addPathObject(abbreviatedData,boundary);
pathObject.setJoin("Round");
pathObject.setLineWidth(2.0);
本章节所有的方法基本都返回一个CTPageBlock.PathObject对象。通过该对象可以重新设置图像的绘制相关信息,主要包括如下:
CTColor color=new CTColor();
color.setValue("255 0 0");
CTColor color2=new CTColor();
color2.setValue("255 0 255");
CTBoundary boundary=new CTBoundary(0,0,100,100);
//测试 70 线
String abbreviatedData= "M 10 80 L 50 10 L 90 80 L 10 80 C" ;
CTPageBlock.PathObject pathObject= page.addPathObject(abbreviatedData,boundary);
pathObject.setJoin("Round");
pathObject.setLineWidth(2.0);
pathObject.setStrokeColor(color);
pathObject.setFillColor(color2);
pathObject.setDashPattern("2 2");