mirror of
https://github.com/apache/poi.git
synced 2025-03-06 08:59:07 +00:00
#65612 - XSLF CustomGeometry - replace XmlStreamReader access with XmlBeans delegate
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1893859 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
99fe7a9635
commit
9f7085a281
@ -136,6 +136,7 @@ subprojects {
|
||||
resolutionStrategy {
|
||||
force "commons-io:commons-io:${commonsIoVersion}"
|
||||
force 'org.slf4j:slf4j-api:1.7.32'
|
||||
force 'com.fasterxml.woodstox:woodstox-core:6.2.6'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,66 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.xslf.draw.geom;
|
||||
|
||||
import org.apache.poi.sl.draw.geom.AdjustPointIf;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjPoint2D;
|
||||
|
||||
/**
|
||||
* Wrapper / delegate for XmlBeans custom geometry
|
||||
*/
|
||||
@Beta
|
||||
public class XSLFAdjustPoint implements AdjustPointIf {
|
||||
|
||||
private final CTAdjPoint2D pnt;
|
||||
|
||||
public XSLFAdjustPoint(CTAdjPoint2D pnt) {
|
||||
this.pnt = pnt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getX() {
|
||||
return pnt.xgetX().getStringValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setX(String value) {
|
||||
pnt.setX(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSetX() {
|
||||
return pnt.xgetX() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getY() {
|
||||
return pnt.xgetY().getStringValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setY(String value) {
|
||||
pnt.setY(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSetY() {
|
||||
return pnt.xgetY() != null;
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.xslf.draw.geom;
|
||||
|
||||
import org.apache.poi.sl.draw.geom.AdjustValueIf;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuide;
|
||||
|
||||
/**
|
||||
* Wrapper / delegate for XmlBeans custom geometry
|
||||
*/
|
||||
@Beta
|
||||
public class XSLFAdjustValue extends XSLFGuide implements AdjustValueIf {
|
||||
public XSLFAdjustValue(CTGeomGuide guide) {
|
||||
super(guide);
|
||||
}
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.xslf.draw.geom;
|
||||
|
||||
import org.apache.poi.sl.draw.geom.ArcToCommandIf;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DArcTo;
|
||||
|
||||
/**
|
||||
* Wrapper / delegate for XmlBeans custom geometry
|
||||
*/
|
||||
@Beta
|
||||
public class XSLFArcTo implements ArcToCommandIf {
|
||||
private final CTPath2DArcTo arc;
|
||||
|
||||
public XSLFArcTo(CTPath2DArcTo arc) {
|
||||
this.arc = arc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHR() {
|
||||
return arc.xgetHR().getStringValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHR(String hr) {
|
||||
arc.setHR(hr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWR() {
|
||||
return arc.xgetHR().getStringValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWR(String wr) {
|
||||
arc.setWR(wr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStAng() {
|
||||
return arc.xgetStAng().getStringValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStAng(String stAng) {
|
||||
arc.setStAng(stAng);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSwAng() {
|
||||
return arc.xgetSwAng().getStringValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSwAng(String swAng) {
|
||||
arc.setSwAng(swAng);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.xslf.draw.geom;
|
||||
|
||||
import org.apache.poi.sl.draw.geom.AdjustPointIf;
|
||||
import org.apache.poi.sl.draw.geom.ConnectionSiteIf;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjPoint2D;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTConnectionSite;
|
||||
|
||||
/**
|
||||
* Wrapper / delegate for XmlBeans custom geometry
|
||||
*/
|
||||
@Beta
|
||||
public class XSLFConnectionSite implements ConnectionSiteIf {
|
||||
|
||||
final CTConnectionSite cxn;
|
||||
|
||||
public XSLFConnectionSite(CTConnectionSite cxn) {
|
||||
this.cxn = cxn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdjustPointIf getPos() {
|
||||
return new XSLFAdjustPoint(cxn.getPos());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPos(AdjustPointIf pos) {
|
||||
CTAdjPoint2D p = cxn.getPos();
|
||||
if (p == null) {
|
||||
p = cxn.addNewPos();
|
||||
}
|
||||
p.setX(pos.getX());
|
||||
p.setY(pos.getY());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAng() {
|
||||
return cxn.xgetAng().getStringValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the ang property.
|
||||
*/
|
||||
@Override
|
||||
public void setAng(String value) {
|
||||
cxn.setAng(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSetAng() {
|
||||
return cxn.xgetAng() == null;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.xslf.draw.geom;
|
||||
|
||||
import org.apache.poi.sl.draw.geom.AdjustPointIf;
|
||||
import org.apache.poi.sl.draw.geom.CurveToCommandIf;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjPoint2D;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DCubicBezierTo;
|
||||
|
||||
/**
|
||||
* Wrapper / delegate for XmlBeans custom geometry
|
||||
*/
|
||||
@Beta
|
||||
public class XSLFCurveTo implements CurveToCommandIf {
|
||||
private final CTPath2DCubicBezierTo bezier;
|
||||
|
||||
public XSLFCurveTo(CTPath2DCubicBezierTo bezier) {
|
||||
this.bezier = bezier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public XSLFAdjustPoint getPt1() {
|
||||
return new XSLFAdjustPoint(bezier.getPtArray(0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPt1(AdjustPointIf pt1) {
|
||||
CTAdjPoint2D xpt = getOrCreate(0);
|
||||
xpt.setX(pt1.getX());
|
||||
xpt.setY(pt1.getY());
|
||||
}
|
||||
|
||||
@Override
|
||||
public XSLFAdjustPoint getPt2() {
|
||||
return new XSLFAdjustPoint(bezier.getPtArray(1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPt2(AdjustPointIf pt2) {
|
||||
CTAdjPoint2D xpt = getOrCreate(1);
|
||||
xpt.setX(pt2.getX());
|
||||
xpt.setY(pt2.getY());
|
||||
}
|
||||
|
||||
@Override
|
||||
public XSLFAdjustPoint getPt3() {
|
||||
return new XSLFAdjustPoint(bezier.getPtArray(2));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPt3(AdjustPointIf pt3) {
|
||||
CTAdjPoint2D xpt = getOrCreate(2);
|
||||
xpt.setX(pt3.getX());
|
||||
xpt.setY(pt3.getY());
|
||||
}
|
||||
|
||||
private CTAdjPoint2D getOrCreate(int idx) {
|
||||
for (int i=(idx+1)-bezier.sizeOfPtArray(); i > 0; i--) {
|
||||
bezier.addNewPt();
|
||||
}
|
||||
return bezier.getPtArray(idx);
|
||||
}
|
||||
}
|
@ -0,0 +1,89 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.xslf.draw.geom;
|
||||
|
||||
import org.apache.poi.sl.draw.geom.CustomGeometry;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjustHandleList;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTConnectionSite;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTCustomGeometry2D;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuide;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuideList;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomRect;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2D;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DList;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPolarAdjustHandle;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTXYAdjustHandle;
|
||||
|
||||
/**
|
||||
* Wrapper / delegate for XmlBeans custom geometry
|
||||
*/
|
||||
@Beta
|
||||
public class XSLFCustomGeometry {
|
||||
public static CustomGeometry convertCustomGeometry(CTCustomGeometry2D custGeom) {
|
||||
CustomGeometry cg = new CustomGeometry();
|
||||
|
||||
if (custGeom.isSetAhLst()) {
|
||||
CTAdjustHandleList ahLst = custGeom.getAhLst();
|
||||
for (CTXYAdjustHandle xy : ahLst.getAhXYArray()) {
|
||||
cg.addAdjustHandle(new XSLFXYAdjustHandle(xy));
|
||||
}
|
||||
for (CTPolarAdjustHandle pol : ahLst.getAhPolarArray()) {
|
||||
cg.addAdjustHandle(new XSLFPolarAdjustHandle(pol));
|
||||
}
|
||||
}
|
||||
|
||||
if (custGeom.isSetAvLst()) {
|
||||
CTGeomGuideList avLst = custGeom.getAvLst();
|
||||
for (CTGeomGuide gg : avLst.getGdArray()) {
|
||||
cg.addAdjustGuide(new XSLFAdjustValue(gg));
|
||||
}
|
||||
}
|
||||
|
||||
if (custGeom.isSetGdLst()) {
|
||||
CTGeomGuideList gdLst = custGeom.getGdLst();
|
||||
for (CTGeomGuide gg : gdLst.getGdArray()) {
|
||||
cg.addGeomGuide(new XSLFGuide(gg));
|
||||
}
|
||||
}
|
||||
|
||||
if (custGeom.isSetRect()) {
|
||||
CTGeomRect r = custGeom.getRect();
|
||||
cg.setTextBounds(
|
||||
r.xgetL().getStringValue(),
|
||||
r.xgetT().getStringValue(),
|
||||
r.xgetR().getStringValue(),
|
||||
r.xgetB().getStringValue());
|
||||
}
|
||||
|
||||
if (custGeom.isSetCxnLst()) {
|
||||
for (CTConnectionSite cxn : custGeom.getCxnLst().getCxnArray()) {
|
||||
cg.addConnectionSite(new XSLFConnectionSite((cxn)));
|
||||
}
|
||||
}
|
||||
|
||||
CTPath2DList pl = custGeom.getPathLst();
|
||||
if (pl != null) {
|
||||
for (CTPath2D p : pl.getPathArray()) {
|
||||
cg.addPath(new XSLFPath(p));
|
||||
}
|
||||
}
|
||||
|
||||
return cg;
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.xslf.draw.geom;
|
||||
|
||||
import org.apache.poi.sl.draw.geom.GuideIf;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuide;
|
||||
|
||||
/**
|
||||
* Wrapper / delegate for XmlBeans custom geometry
|
||||
*/
|
||||
@Beta
|
||||
public class XSLFGuide implements GuideIf {
|
||||
final CTGeomGuide guide;
|
||||
|
||||
public XSLFGuide(CTGeomGuide guide) {
|
||||
this.guide = guide;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return guide.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(String name) {
|
||||
guide.setName(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFmla() {
|
||||
return guide.getFmla();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFmla(String fmla) {
|
||||
guide.setFmla(fmla);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.xslf.draw.geom;
|
||||
|
||||
import org.apache.poi.sl.draw.geom.AdjustPointIf;
|
||||
import org.apache.poi.sl.draw.geom.LineToCommandIf;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjPoint2D;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DLineTo;
|
||||
|
||||
/**
|
||||
* Wrapper / delegate for XmlBeans custom geometry
|
||||
*/
|
||||
@Beta
|
||||
public class XSLFLineTo implements LineToCommandIf {
|
||||
|
||||
private final CTPath2DLineTo lineTo;
|
||||
|
||||
public XSLFLineTo(CTPath2DLineTo lineTo) {
|
||||
this.lineTo = lineTo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdjustPointIf getPt() {
|
||||
return new XSLFAdjustPoint(lineTo.getPt());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPt(AdjustPointIf pt) {
|
||||
CTAdjPoint2D xpt = lineTo.getPt();
|
||||
if (xpt == null) {
|
||||
xpt = lineTo.addNewPt();
|
||||
}
|
||||
xpt.setX(pt.getX());
|
||||
xpt.setY(pt.getY());
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.xslf.draw.geom;
|
||||
|
||||
import org.apache.poi.sl.draw.geom.AdjustPointIf;
|
||||
import org.apache.poi.sl.draw.geom.MoveToCommandIf;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjPoint2D;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DMoveTo;
|
||||
|
||||
/**
|
||||
* Wrapper / delegate for XmlBeans custom geometry
|
||||
*/
|
||||
@Beta
|
||||
public class XSLFMoveTo implements MoveToCommandIf {
|
||||
|
||||
private final CTPath2DMoveTo moveTo;
|
||||
|
||||
public XSLFMoveTo(CTPath2DMoveTo moveTo) {
|
||||
this.moveTo = moveTo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public XSLFAdjustPoint getPt() {
|
||||
return new XSLFAdjustPoint(moveTo.getPt());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPt(AdjustPointIf pt) {
|
||||
CTAdjPoint2D xpt = moveTo.getPt();
|
||||
if (xpt == null) {
|
||||
xpt = moveTo.addNewPt();
|
||||
}
|
||||
xpt.setX(pt.getX());
|
||||
xpt.setY(pt.getY());
|
||||
}
|
||||
}
|
@ -0,0 +1,178 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.xslf.draw.geom;
|
||||
|
||||
import java.awt.geom.Path2D;
|
||||
|
||||
import org.apache.poi.sl.draw.geom.ClosePathCommand;
|
||||
import org.apache.poi.sl.draw.geom.Context;
|
||||
import org.apache.poi.sl.draw.geom.PathCommand;
|
||||
import org.apache.poi.sl.draw.geom.PathIf;
|
||||
import org.apache.poi.sl.usermodel.PaintStyle;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.apache.xmlbeans.XmlCursor;
|
||||
import org.apache.xmlbeans.XmlObject;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2D;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DArcTo;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DClose;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DCubicBezierTo;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DLineTo;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DMoveTo;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DQuadBezierTo;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.STPathFillMode;
|
||||
|
||||
/**
|
||||
* Wrapper / delegate for XmlBeans custom geometry
|
||||
*/
|
||||
@Beta
|
||||
public class XSLFPath implements PathIf {
|
||||
|
||||
private final CTPath2D pathXml;
|
||||
|
||||
public XSLFPath(CTPath2D pathXml) {
|
||||
this.pathXml = pathXml;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCommand(PathCommand cmd) {
|
||||
// not supported
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path2D.Double getPath(Context ctx) {
|
||||
Path2D.Double path2D = new Path2D.Double();
|
||||
XmlCursor cur = pathXml.newCursor();
|
||||
try {
|
||||
for (boolean hasNext = cur.toFirstChild(); hasNext; hasNext = cur.toNextSibling()) {
|
||||
XmlObject xo = cur.getObject();
|
||||
PathCommand pc;
|
||||
if (xo instanceof CTPath2DArcTo) {
|
||||
pc = new XSLFArcTo((CTPath2DArcTo) xo);
|
||||
} else if (xo instanceof CTPath2DCubicBezierTo) {
|
||||
pc = new XSLFCurveTo((CTPath2DCubicBezierTo) xo);
|
||||
} else if (xo instanceof CTPath2DMoveTo) {
|
||||
pc = new XSLFMoveTo((CTPath2DMoveTo) xo);
|
||||
} else if (xo instanceof CTPath2DLineTo) {
|
||||
pc = new XSLFLineTo((CTPath2DLineTo) xo);
|
||||
} else if (xo instanceof CTPath2DQuadBezierTo) {
|
||||
pc = new XSLFQuadTo((CTPath2DQuadBezierTo) xo);
|
||||
} else if (xo instanceof CTPath2DClose) {
|
||||
pc = new ClosePathCommand();
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
pc.execute(path2D, ctx);
|
||||
}
|
||||
} finally {
|
||||
cur.dispose();
|
||||
}
|
||||
return path2D;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isStroked() {
|
||||
return pathXml.getStroke();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStroke(boolean stroke) {
|
||||
pathXml.setStroke(stroke);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFilled() {
|
||||
return pathXml.getFill() != STPathFillMode.NONE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaintStyle.PaintModifier getFill() {
|
||||
switch (pathXml.getFill().intValue()) {
|
||||
default:
|
||||
case STPathFillMode.INT_NONE:
|
||||
return PaintStyle.PaintModifier.NONE;
|
||||
case STPathFillMode.INT_NORM:
|
||||
return PaintStyle.PaintModifier.NORM;
|
||||
case STPathFillMode.INT_LIGHTEN:
|
||||
return PaintStyle.PaintModifier.LIGHTEN;
|
||||
case STPathFillMode.INT_LIGHTEN_LESS:
|
||||
return PaintStyle.PaintModifier.LIGHTEN_LESS;
|
||||
case STPathFillMode.INT_DARKEN:
|
||||
return PaintStyle.PaintModifier.DARKEN;
|
||||
case STPathFillMode.INT_DARKEN_LESS:
|
||||
return PaintStyle.PaintModifier.DARKEN_LESS;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFill(PaintStyle.PaintModifier fill) {
|
||||
STPathFillMode.Enum f;
|
||||
switch (fill) {
|
||||
default:
|
||||
case NONE:
|
||||
f = STPathFillMode.NONE;
|
||||
break;
|
||||
case NORM:
|
||||
f = STPathFillMode.NORM;
|
||||
break;
|
||||
case LIGHTEN:
|
||||
f = STPathFillMode.LIGHTEN;
|
||||
break;
|
||||
case LIGHTEN_LESS:
|
||||
f = STPathFillMode.LIGHTEN_LESS;
|
||||
break;
|
||||
case DARKEN:
|
||||
f = STPathFillMode.DARKEN;
|
||||
break;
|
||||
case DARKEN_LESS:
|
||||
f = STPathFillMode.DARKEN_LESS;
|
||||
break;
|
||||
}
|
||||
pathXml.setFill(f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getW() {
|
||||
return pathXml.getW();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setW(long w) {
|
||||
pathXml.setW(w);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getH() {
|
||||
return pathXml.getH();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setH(long h) {
|
||||
pathXml.setH(h);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isExtrusionOk() {
|
||||
return pathXml.getExtrusionOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setExtrusionOk(boolean extrusionOk) {
|
||||
pathXml.setExtrusionOk(extrusionOk);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.xslf.draw.geom;
|
||||
|
||||
import org.apache.poi.sl.draw.geom.AdjustHandle;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPolarAdjustHandle;
|
||||
|
||||
/**
|
||||
* Wrapper / delegate for XmlBeans custom geometry
|
||||
*/
|
||||
@Beta
|
||||
public class XSLFPolarAdjustHandle implements AdjustHandle {
|
||||
final CTPolarAdjustHandle xobj;
|
||||
|
||||
public XSLFPolarAdjustHandle(CTPolarAdjustHandle xobj) {
|
||||
this.xobj = xobj;
|
||||
}
|
||||
|
||||
// define more getter/setter when needed
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.xslf.draw.geom;
|
||||
|
||||
import org.apache.poi.sl.draw.geom.AdjustPointIf;
|
||||
import org.apache.poi.sl.draw.geom.QuadToCommandIf;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DQuadBezierTo;
|
||||
|
||||
/**
|
||||
* Wrapper / delegate for XmlBeans custom geometry
|
||||
*/
|
||||
@Beta
|
||||
public class XSLFQuadTo implements QuadToCommandIf {
|
||||
|
||||
private final CTPath2DQuadBezierTo bezier;
|
||||
|
||||
public XSLFQuadTo(CTPath2DQuadBezierTo bezier) {
|
||||
this.bezier = bezier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdjustPointIf getPt1() {
|
||||
return new XSLFAdjustPoint(bezier.getPtArray(0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPt1(AdjustPointIf pt1) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdjustPointIf getPt2() {
|
||||
return new XSLFAdjustPoint(bezier.getPtArray(1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPt2(AdjustPointIf pt2) {
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.xslf.draw.geom;
|
||||
|
||||
import org.apache.poi.sl.draw.geom.AdjustHandle;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTXYAdjustHandle;
|
||||
|
||||
/**
|
||||
* Wrapper / delegate for XmlBeans custom geometry
|
||||
*/
|
||||
@Beta
|
||||
public class XSLFXYAdjustHandle implements AdjustHandle {
|
||||
final CTXYAdjustHandle xobj;
|
||||
public XSLFXYAdjustHandle(CTXYAdjustHandle xobj) {
|
||||
this.xobj = xobj;
|
||||
}
|
||||
|
||||
// define more getter/setter when needed
|
||||
}
|
@ -75,6 +75,7 @@ public class XSLFBackground extends XSLFSimpleShape
|
||||
return bg.getBgPr();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFillColor(Color color) {
|
||||
CTBackgroundProperties bgPr = getBgPr(true);
|
||||
|
||||
|
@ -24,21 +24,16 @@ import java.awt.geom.Path2D;
|
||||
import java.awt.geom.PathIterator;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.XMLStreamReader;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.poi.ooxml.POIXMLTypeLoader;
|
||||
import org.apache.poi.ooxml.util.POIXMLUnits;
|
||||
import org.apache.poi.sl.draw.geom.CustomGeometry;
|
||||
import org.apache.poi.sl.draw.geom.PresetGeometries;
|
||||
import org.apache.poi.sl.usermodel.FreeformShape;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.apache.poi.util.Units;
|
||||
import org.apache.poi.xslf.draw.geom.XSLFCustomGeometry;
|
||||
import org.apache.xmlbeans.XmlCursor;
|
||||
import org.apache.xmlbeans.XmlObject;
|
||||
import org.apache.xmlbeans.XmlOptions;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjPoint2D;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTCustomGeometry2D;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomRect;
|
||||
@ -135,18 +130,7 @@ public class XSLFFreeformShape extends XSLFAutoShape
|
||||
return null;
|
||||
}
|
||||
|
||||
XmlOptions xop = new XmlOptions(POIXMLTypeLoader.DEFAULT_XML_OPTIONS);
|
||||
xop.setSaveOuter();
|
||||
|
||||
XMLStreamReader staxReader = ((CTShapeProperties)xo).getCustGeom().newXMLStreamReader(xop);
|
||||
CustomGeometry custGeo = PresetGeometries.convertCustomGeometry(staxReader);
|
||||
try {
|
||||
staxReader.close();
|
||||
} catch (XMLStreamException e) {
|
||||
LOG.atWarn().log("An error occurred while closing a Custom Geometry XML Stream Reader: {}", e.getMessage());
|
||||
}
|
||||
|
||||
return custGeo;
|
||||
return XSLFCustomGeometry.convertCustomGeometry(((CTShapeProperties)xo).getCustGeom());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -22,9 +22,6 @@ package org.apache.poi.xslf.usermodel;
|
||||
import java.awt.Color;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.XMLStreamReader;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.poi.ooxml.util.POIXMLUnits;
|
||||
@ -47,6 +44,7 @@ import org.apache.poi.sl.usermodel.StrokeStyle.LineCompound;
|
||||
import org.apache.poi.sl.usermodel.StrokeStyle.LineDash;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.apache.poi.util.Units;
|
||||
import org.apache.poi.xslf.draw.geom.XSLFCustomGeometry;
|
||||
import org.apache.poi.xslf.model.PropertyFetcher;
|
||||
import org.apache.poi.xslf.usermodel.XSLFPropertiesDelegate.XSLFEffectProperties;
|
||||
import org.apache.poi.xslf.usermodel.XSLFPropertiesDelegate.XSLFFillProperties;
|
||||
@ -240,7 +238,7 @@ public abstract class XSLFSimpleShape extends XSLFShape
|
||||
|
||||
/**
|
||||
* @param color the color to paint the shape outline.
|
||||
* A <code>null</code> value turns off the shape outline.
|
||||
* A {@code null} value turns off the shape outline.
|
||||
*/
|
||||
public void setLineColor(Color color) {
|
||||
CTLineProperties ln = getLn(this, true);
|
||||
@ -273,7 +271,7 @@ public abstract class XSLFSimpleShape extends XSLFShape
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the color of the shape outline or <code>null</code>
|
||||
* @return the color of the shape outline or {@code null}
|
||||
* if outline is turned off
|
||||
*/
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
@ -351,7 +349,7 @@ public abstract class XSLFSimpleShape extends XSLFShape
|
||||
|
||||
/**
|
||||
*
|
||||
* @param width line width in points. <code>0</code> means no line
|
||||
* @param width line width in points. {@code 0} means no line
|
||||
*/
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
public void setLineWidth(double width) {
|
||||
@ -386,7 +384,7 @@ public abstract class XSLFSimpleShape extends XSLFShape
|
||||
}
|
||||
|
||||
/**
|
||||
* @return line width in points. <code>0</code> means no line.
|
||||
* @return line width in points. {@code 0} means no line.
|
||||
*/
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
public double getLineWidth() {
|
||||
@ -709,14 +707,7 @@ public abstract class XSLFSimpleShape extends XSLFShape
|
||||
throw new IllegalStateException("Unknown shape geometry: " + name + ", available geometries are: " + dict.keySet());
|
||||
}
|
||||
} else if (gp.isSetCustGeom()){
|
||||
XMLStreamReader staxReader = gp.getCustGeom().newXMLStreamReader();
|
||||
geom = PresetGeometries.convertCustomGeometry(staxReader);
|
||||
try {
|
||||
staxReader.close();
|
||||
}
|
||||
catch (XMLStreamException e) {
|
||||
LOG.atWarn().log("An error occurred while closing a Custom Geometry XML Stream Reader: {}", e.getMessage());
|
||||
}
|
||||
geom = XSLFCustomGeometry.convertCustomGeometry(gp.getCustGeom());
|
||||
} else {
|
||||
geom = dict.get("rect");
|
||||
}
|
||||
|
@ -27,6 +27,8 @@ import java.util.List;
|
||||
|
||||
import javax.xml.namespace.QName;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.poi.ooxml.util.POIXMLUnits;
|
||||
import org.apache.poi.sl.draw.DrawFactory;
|
||||
import org.apache.poi.sl.draw.DrawTableShape;
|
||||
@ -52,6 +54,7 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFra
|
||||
public class XSLFTable extends XSLFGraphicFrame implements Iterable<XSLFTableRow>,
|
||||
TableShape<XSLFShape,XSLFTextParagraph> {
|
||||
/* package */ static final String TABLE_URI = "http://schemas.openxmlformats.org/drawingml/2006/table";
|
||||
private static final Logger LOG = LogManager.getLogger(XSLFTable.class);
|
||||
|
||||
private final CTTable _table;
|
||||
private final List<XSLFTableRow> _rows;
|
||||
@ -425,13 +428,17 @@ public class XSLFTable extends XSLFGraphicFrame implements Iterable<XSLFTableRow
|
||||
for (int col2=col+1; col2<col+tc.getGridSpan(); col2++) {
|
||||
assert(col2 < cols);
|
||||
XSLFTableCell tc2 = getCell(row, col2);
|
||||
assert(tc2.getGridSpan() == 1 && tc2.getRowSpan() == 1);
|
||||
if (tc2.getGridSpan() != 1 || tc2.getRowSpan() != 1) {
|
||||
LOG.warn("invalid table span - rendering result is probably wrong");
|
||||
}
|
||||
mergedBounds.add(tc2.getAnchor());
|
||||
}
|
||||
for (int row2=row+1; row2<row+tc.getRowSpan(); row2++) {
|
||||
assert(row2 < rows);
|
||||
XSLFTableCell tc2 = getCell(row2, col);
|
||||
assert(tc2.getGridSpan() == 1 && tc2.getRowSpan() == 1);
|
||||
if (tc2.getGridSpan() != 1 || tc2.getRowSpan() != 1) {
|
||||
LOG.warn("invalid table span - rendering result is probably wrong");
|
||||
}
|
||||
mergedBounds.add(tc2.getAnchor());
|
||||
}
|
||||
tc.setAnchor(mergedBounds);
|
||||
|
@ -477,7 +477,13 @@ public final class PPTX2PNG {
|
||||
if (outfile != null) {
|
||||
return outfile;
|
||||
}
|
||||
String inname = String.format(Locale.ROOT, "%04d|%s|%s", slideNo, format, file.getName());
|
||||
|
||||
String fileName = file.getName();
|
||||
if ("stdin".equals(fileName)) {
|
||||
fileName += ".ext";
|
||||
}
|
||||
|
||||
String inname = String.format(Locale.ROOT, "%04d|%s|%s", slideNo, format, fileName);
|
||||
String outpat = (proxy.getSlideCount() > 1 && slideNo > 0 ? outPattern : outPattern.replaceAll("-?\\$\\{slideno}", ""));
|
||||
return INPUT_PATTERN.matcher(inname).replaceAll(outpat);
|
||||
}
|
||||
|
Binary file not shown.
@ -72,6 +72,7 @@ module org.apache.poi.ooxml {
|
||||
exports org.apache.poi.xssf.streaming;
|
||||
exports org.apache.poi.xssf.util;
|
||||
exports org.apache.poi.xslf.draw;
|
||||
exports org.apache.poi.xslf.draw.geom;
|
||||
exports org.apache.poi.xslf.usermodel;
|
||||
exports org.apache.poi.xslf.model;
|
||||
exports org.apache.poi.xslf.util;
|
||||
|
@ -35,6 +35,7 @@ import java.util.zip.ZipFile;
|
||||
|
||||
import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
|
||||
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
import org.apache.poi.POIDataSamples;
|
||||
import org.apache.poi.poifs.filesystem.FileMagic;
|
||||
import org.apache.poi.xslf.util.PPTX2PNG;
|
||||
@ -126,7 +127,6 @@ class TestPPTX2PNG {
|
||||
"-format", format, // png,gif,jpg,svg,pdf or null for test
|
||||
"-slide", "-1", // -1 for all
|
||||
"-outdir", tmpDir.getCanonicalPath(),
|
||||
"-outpat", "${basename}-${slideno}-${ext}.${format}",
|
||||
// "-dump", new File("build/tmp/", pptFile+".json").getCanonicalPath(),
|
||||
"-dump", "null",
|
||||
"-quiet",
|
||||
@ -157,17 +157,26 @@ class TestPPTX2PNG {
|
||||
args.add("GBK");
|
||||
}
|
||||
|
||||
final String basename = FilenameUtils.getBaseName(fileName);
|
||||
final String ext = FilenameUtils.getExtension(fileName);
|
||||
|
||||
if (fileObj instanceof ZipEntry) {
|
||||
ZipEntry ze = (ZipEntry)fileObj;
|
||||
ZipFile zf = (ZipFile)fileContainer;
|
||||
System.setIn(zf.getInputStream(ze));
|
||||
args.add("-outpat");
|
||||
args.add(basename+"-${slideno}-"+ext+".${format}");
|
||||
args.add("stdin");
|
||||
} else if (fileObj instanceof SevenZArchiveEntry) {
|
||||
SevenZArchiveEntry ze = (SevenZArchiveEntry)fileObj;
|
||||
SevenZFile zf = (SevenZFile)fileContainer;
|
||||
System.setIn(zf.getInputStream(ze));
|
||||
args.add("-outpat");
|
||||
args.add(basename+"-${slideno}-"+ext+".${format}");
|
||||
args.add("stdin");
|
||||
} else if (fileObj instanceof File) {
|
||||
args.add("-outpat");
|
||||
args.add("${basename}-${slideno}-${ext}.${format}");
|
||||
args.add(((File)fileObj).getAbsolutePath());
|
||||
}
|
||||
|
||||
|
Binary file not shown.
@ -70,6 +70,7 @@ module org.apache.poi.ooxml {
|
||||
exports org.apache.poi.xssf.streaming;
|
||||
exports org.apache.poi.xssf.util;
|
||||
exports org.apache.poi.xslf.draw;
|
||||
exports org.apache.poi.xslf.draw.geom;
|
||||
exports org.apache.poi.xslf.usermodel;
|
||||
exports org.apache.poi.xslf.model;
|
||||
exports org.apache.poi.xslf.util;
|
||||
|
@ -37,6 +37,7 @@ import org.apache.poi.sl.draw.geom.Context;
|
||||
import org.apache.poi.sl.draw.geom.CustomGeometry;
|
||||
import org.apache.poi.sl.draw.geom.Outline;
|
||||
import org.apache.poi.sl.draw.geom.Path;
|
||||
import org.apache.poi.sl.draw.geom.PathIf;
|
||||
import org.apache.poi.sl.usermodel.LineDecoration;
|
||||
import org.apache.poi.sl.usermodel.LineDecoration.DecorationShape;
|
||||
import org.apache.poi.sl.usermodel.LineDecoration.DecorationSize;
|
||||
@ -85,7 +86,7 @@ public class DrawSimpleShape extends DrawShape {
|
||||
|
||||
PaintModifier pm = null;
|
||||
for (Outline o : elems) {
|
||||
Path path = o.getPath();
|
||||
PathIf path = o.getPath();
|
||||
if (path.isFilled()) {
|
||||
PaintModifier pmOld = pm;
|
||||
pm = path.getFill();
|
||||
@ -169,7 +170,7 @@ public class DrawSimpleShape extends DrawShape {
|
||||
|
||||
for(Outline o : lst){
|
||||
java.awt.Shape s = o.getOutline();
|
||||
Path p = o.getPath();
|
||||
PathIf p = o.getPath();
|
||||
graphics.setRenderingHint(Drawable.GRADIENT_SHAPE, s);
|
||||
|
||||
if(p.isFilled()) {
|
||||
@ -197,10 +198,12 @@ public class DrawSimpleShape extends DrawShape {
|
||||
double lineWidth = Math.max(2.5, stroke.getLineWidth());
|
||||
|
||||
Rectangle2D anchor = getAnchor(graphics, getShape());
|
||||
double x2 = anchor.getX() + anchor.getWidth(),
|
||||
y2 = anchor.getY() + anchor.getHeight();
|
||||
|
||||
double alpha = Math.atan(anchor.getHeight() / anchor.getWidth());
|
||||
double x2 = 0, y2 = 0, alpha = 0;
|
||||
if (anchor != null) {
|
||||
x2 = anchor.getX() + anchor.getWidth();
|
||||
y2 = anchor.getY() + anchor.getHeight();
|
||||
alpha = Math.atan(anchor.getHeight() / anchor.getWidth());
|
||||
}
|
||||
|
||||
AffineTransform at = new AffineTransform();
|
||||
java.awt.Shape tailShape = null;
|
||||
@ -273,9 +276,12 @@ public class DrawSimpleShape extends DrawShape {
|
||||
double lineWidth = Math.max(2.5, stroke.getLineWidth());
|
||||
|
||||
Rectangle2D anchor = getAnchor(graphics, getShape());
|
||||
double x1 = anchor.getX(), y1 = anchor.getY();
|
||||
|
||||
double alpha = Math.atan(anchor.getHeight() / anchor.getWidth());
|
||||
double x1 = 0, y1 = 0, alpha = 0;
|
||||
if (anchor != null) {
|
||||
x1 = anchor.getX();
|
||||
y1 = anchor.getY();
|
||||
alpha = Math.atan(anchor.getHeight() / anchor.getWidth());
|
||||
}
|
||||
|
||||
AffineTransform at = new AffineTransform();
|
||||
java.awt.Shape headShape = null;
|
||||
@ -362,7 +368,7 @@ public class DrawSimpleShape extends DrawShape {
|
||||
|
||||
for (Outline o : outlines) {
|
||||
java.awt.Shape s = o.getOutline();
|
||||
Path p = o.getPath();
|
||||
PathIf p = o.getPath();
|
||||
graphics.setRenderingHint(Drawable.GRADIENT_SHAPE, s);
|
||||
graphics.setPaint(shadowColor);
|
||||
|
||||
@ -389,7 +395,7 @@ public class DrawSimpleShape extends DrawShape {
|
||||
if(anchor == null) {
|
||||
return lst;
|
||||
}
|
||||
for (Path p : geom) {
|
||||
for (PathIf p : geom) {
|
||||
|
||||
double w = p.getW(), h = p.getH(), scaleX, scaleY;
|
||||
if (w == -1) {
|
||||
|
@ -39,66 +39,39 @@ import java.util.Objects;
|
||||
*/
|
||||
// @XmlAccessorType(XmlAccessType.FIELD)
|
||||
// @XmlType(name = "CT_AdjPoint2D")
|
||||
public class AdjustPoint {
|
||||
public class AdjustPoint implements AdjustPointIf {
|
||||
|
||||
// @XmlAttribute(name = "x", required = true)
|
||||
private String x;
|
||||
// @XmlAttribute(name = "y", required = true)
|
||||
private String y;
|
||||
|
||||
|
||||
/**
|
||||
* Gets the value of the x property.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public String getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the x property.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void setX(String value) {
|
||||
this.x = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSetX() {
|
||||
return (this.x!= null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the y property.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public String getY() {
|
||||
return y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the y property.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void setY(String value) {
|
||||
this.y = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSetY() {
|
||||
return (this.y!= null);
|
||||
}
|
||||
|
@ -0,0 +1,44 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
public interface AdjustPointIf {
|
||||
/**
|
||||
* Gets the value of the x property.
|
||||
*/
|
||||
String getX();
|
||||
|
||||
/**
|
||||
* Sets the value of the x property.
|
||||
*/
|
||||
void setX(String value);
|
||||
|
||||
boolean isSetX();
|
||||
|
||||
/**
|
||||
* Gets the value of the y property.
|
||||
*/
|
||||
String getY();
|
||||
|
||||
/**
|
||||
* Sets the value of the y property.
|
||||
*/
|
||||
void setY(String value);
|
||||
|
||||
boolean isSetY();
|
||||
}
|
@ -22,12 +22,6 @@ package org.apache.poi.sl.draw.geom;
|
||||
/**
|
||||
* Represents a shape adjust values (see section 20.1.9.5 in the spec)
|
||||
*/
|
||||
public class AdjustValue extends Guide {
|
||||
public class AdjustValue extends Guide implements AdjustValueIf {
|
||||
|
||||
@Override
|
||||
public double evaluate(Context ctx){
|
||||
String name = getName();
|
||||
Guide adj = ctx.getAdjustValue(name);
|
||||
return (adj != null) ? adj.evaluate(ctx) : super.evaluate(ctx);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,32 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
public interface AdjustValueIf extends GuideIf {
|
||||
@Override
|
||||
default double evaluate(Context ctx) {
|
||||
return evaluateAdjustValue(ctx);
|
||||
}
|
||||
|
||||
default double evaluateAdjustValue(Context ctx){
|
||||
String name = getName();
|
||||
GuideIf adj = ctx.getAdjustValue(name);
|
||||
return (adj != null) ? adj.evaluate(ctx) : evaluateGuide(ctx);
|
||||
}
|
||||
|
||||
}
|
@ -19,11 +19,6 @@
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
import static org.apache.poi.sl.draw.geom.Formula.OOXML_DEGREE;
|
||||
|
||||
import java.awt.geom.Arc2D;
|
||||
import java.awt.geom.Path2D;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.util.Objects;
|
||||
|
||||
import org.apache.poi.util.Internal;
|
||||
@ -57,7 +52,7 @@ import org.apache.poi.util.Internal;
|
||||
*/
|
||||
// @XmlAccessorType(XmlAccessType.FIELD)
|
||||
// @XmlType(name = "CT_Path2DArcTo")
|
||||
public class ArcToCommand implements PathCommand {
|
||||
public class ArcToCommand implements ArcToCommandIf {
|
||||
|
||||
// @XmlAttribute(name = "wR", required = true)
|
||||
private String wr;
|
||||
@ -68,51 +63,51 @@ public class ArcToCommand implements PathCommand {
|
||||
// @XmlAttribute(name = "swAng", required = true)
|
||||
private String swAng;
|
||||
|
||||
@Override
|
||||
public void setHR(String hr) {
|
||||
this.hr = hr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHR() {
|
||||
return hr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStAng() {
|
||||
return stAng;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWR() {
|
||||
return wr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWR(String wr) {
|
||||
this.wr = wr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStAng(String stAng) {
|
||||
this.stAng = stAng;
|
||||
}
|
||||
|
||||
public void setSwAng(String swAng) {
|
||||
this.swAng = swAng;
|
||||
@Override
|
||||
public String getSwAng() {
|
||||
return swAng;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(Path2D.Double path, Context ctx){
|
||||
double rx = ctx.getValue(wr);
|
||||
double ry = ctx.getValue(hr);
|
||||
double ooStart = ctx.getValue(stAng) / OOXML_DEGREE;
|
||||
double ooExtent = ctx.getValue(swAng) / OOXML_DEGREE;
|
||||
|
||||
// skew the angles for AWT output
|
||||
double awtStart = convertOoxml2AwtAngle(ooStart, rx, ry);
|
||||
double awtSweep = convertOoxml2AwtAngle(ooStart+ooExtent, rx, ry)-awtStart;
|
||||
|
||||
// calculate the inverse angle - taken from the (reversed) preset definition
|
||||
double radStart = Math.toRadians(ooStart);
|
||||
double invStart = Math.atan2(rx * Math.sin(radStart), ry * Math.cos(radStart));
|
||||
|
||||
Point2D pt = path.getCurrentPoint();
|
||||
// calculate top/left corner
|
||||
double x0 = pt.getX() - rx * Math.cos(invStart) - rx;
|
||||
double y0 = pt.getY() - ry * Math.sin(invStart) - ry;
|
||||
|
||||
Arc2D arc = new Arc2D.Double(x0, y0, 2 * rx, 2 * ry, awtStart, awtSweep, Arc2D.OPEN);
|
||||
path.append(arc, true);
|
||||
public void setSwAng(String swAng) {
|
||||
this.swAng = swAng;
|
||||
}
|
||||
|
||||
/**
|
||||
* Arc2D angles are skewed, OOXML aren't ... so we need to unskew them<p>
|
||||
*
|
||||
* Furthermore ooxml angle starts at the X-axis and increases clock-wise,
|
||||
* where as Arc2D api states
|
||||
* Furthermore, ooxml angle starts at the X-axis and increases clock-wise,
|
||||
* whereas Arc2D api states
|
||||
* "45 degrees always falls on the line from the center of the ellipse to
|
||||
* the upper right corner of the framing rectangle"
|
||||
* so we need to reverse it
|
||||
|
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
import static org.apache.poi.sl.draw.geom.Formula.OOXML_DEGREE;
|
||||
|
||||
import java.awt.geom.Arc2D;
|
||||
import java.awt.geom.Path2D;
|
||||
import java.awt.geom.Point2D;
|
||||
|
||||
public interface ArcToCommandIf extends PathCommand {
|
||||
|
||||
void setHR(String hr);
|
||||
|
||||
void setWR(String wr);
|
||||
|
||||
void setStAng(String stAng);
|
||||
|
||||
void setSwAng(String swAng);
|
||||
|
||||
String getHR();
|
||||
|
||||
String getWR();
|
||||
|
||||
String getStAng();
|
||||
|
||||
String getSwAng();
|
||||
|
||||
|
||||
@Override
|
||||
default void execute(Path2D.Double path, Context ctx){
|
||||
double rx = ctx.getValue(getWR());
|
||||
double ry = ctx.getValue(getHR());
|
||||
double ooStart = ctx.getValue(getStAng()) / OOXML_DEGREE;
|
||||
double ooExtent = ctx.getValue(getSwAng()) / OOXML_DEGREE;
|
||||
|
||||
// skew the angles for AWT output
|
||||
double awtStart = ArcToCommand.convertOoxml2AwtAngle(ooStart, rx, ry);
|
||||
double awtSweep = ArcToCommand.convertOoxml2AwtAngle(ooStart+ooExtent, rx, ry)-awtStart;
|
||||
|
||||
// calculate the inverse angle - taken from the (reversed) preset definition
|
||||
double radStart = Math.toRadians(ooStart);
|
||||
double invStart = Math.atan2(rx * Math.sin(radStart), ry * Math.cos(radStart));
|
||||
|
||||
Point2D pt = path.getCurrentPoint();
|
||||
// calculate top/left corner
|
||||
double x0 = pt.getX() - rx * Math.cos(invStart) - rx;
|
||||
double y0 = pt.getY() - ry * Math.sin(invStart) - ry;
|
||||
|
||||
Arc2D arc = new Arc2D.Double(x0, y0, 2 * rx, 2 * ry, awtStart, awtSweep, Arc2D.OPEN);
|
||||
path.append(arc, true);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -39,7 +39,7 @@ import java.awt.geom.Path2D;
|
||||
*/
|
||||
// @XmlAccessorType(XmlAccessType.FIELD)
|
||||
// @XmlType(name = "CT_Path2DClose")
|
||||
public class ClosePathCommand implements PathCommand {
|
||||
public class ClosePathCommand implements ClosePathCommandIf {
|
||||
|
||||
@Override
|
||||
public void execute(Path2D.Double path, Context ctx){
|
||||
|
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
public interface ClosePathCommandIf extends PathCommand {
|
||||
}
|
@ -41,64 +41,37 @@ import java.util.Objects;
|
||||
*/
|
||||
// @XmlAccessorType(XmlAccessType.FIELD)
|
||||
// @XmlType(name = "CT_ConnectionSite", propOrder = {"pos"})
|
||||
public final class ConnectionSite {
|
||||
public final class ConnectionSite implements ConnectionSiteIf {
|
||||
|
||||
// @XmlElement(required = true)
|
||||
private final AdjustPoint pos = new AdjustPoint();
|
||||
// @XmlAttribute(name = "ang", required = true)
|
||||
private String ang;
|
||||
|
||||
/**
|
||||
* Gets the value of the pos property.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link AdjustPoint }
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public AdjustPoint getPos() {
|
||||
return pos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the pos property.
|
||||
*
|
||||
* @param pos
|
||||
* allowed object is
|
||||
* {@link AdjustPoint }
|
||||
*
|
||||
*/
|
||||
public void setPos(AdjustPoint pos) {
|
||||
@Override
|
||||
public void setPos(AdjustPointIf pos) {
|
||||
if (pos != null) {
|
||||
this.pos.setX(pos.getX());
|
||||
this.pos.setY(pos.getY());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the ang property.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public String getAng() {
|
||||
return ang;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the ang property.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void setAng(String value) {
|
||||
this.ang = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSetAng() {
|
||||
return (this.ang!= null);
|
||||
}
|
||||
|
@ -0,0 +1,44 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
public interface ConnectionSiteIf {
|
||||
|
||||
/**
|
||||
* Gets the value of the pos property.
|
||||
*/
|
||||
AdjustPointIf getPos();
|
||||
|
||||
/**
|
||||
* Sets the value of the pos property.
|
||||
*/
|
||||
void setPos(AdjustPointIf pos);
|
||||
|
||||
/**
|
||||
* Gets the value of the ang property.
|
||||
*/
|
||||
String getAng();
|
||||
|
||||
/**
|
||||
* Sets the value of the ang property.
|
||||
*/
|
||||
void setAng(String value);
|
||||
|
||||
boolean isSetAng();
|
||||
|
||||
}
|
@ -34,14 +34,14 @@ public class Context {
|
||||
private final Map<String, Double> _ctx = new HashMap<>();
|
||||
private final IAdjustableShape _props;
|
||||
private final Rectangle2D _anchor;
|
||||
|
||||
|
||||
public Context(CustomGeometry geom, Rectangle2D anchor, IAdjustableShape props){
|
||||
_props = props;
|
||||
_anchor = anchor;
|
||||
for(Guide gd : geom.adjusts) {
|
||||
for(GuideIf gd : geom.adjusts) {
|
||||
evaluate(gd);
|
||||
}
|
||||
for(Guide gd : geom.guides) {
|
||||
for(GuideIf gd : geom.guides) {
|
||||
evaluate(gd);
|
||||
}
|
||||
}
|
||||
@ -50,7 +50,7 @@ public class Context {
|
||||
return _anchor;
|
||||
}
|
||||
|
||||
Guide getAdjustValue(String name){
|
||||
GuideIf getAdjustValue(String name){
|
||||
return _props.getAdjustValue(name);
|
||||
}
|
||||
|
||||
@ -65,8 +65,8 @@ public class Context {
|
||||
|
||||
public double evaluate(Formula fmla){
|
||||
double result = fmla.evaluate(this);
|
||||
if (fmla instanceof Guide) {
|
||||
String key = ((Guide)fmla).getName();
|
||||
if (fmla instanceof GuideIf) {
|
||||
String key = ((GuideIf)fmla).getName();
|
||||
if (key != null) {
|
||||
_ctx.put(key, result);
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ import java.util.Objects;
|
||||
*/
|
||||
// @XmlAccessorType(XmlAccessType.FIELD)
|
||||
// @XmlType(name = "CT_Path2DCubicBezierTo", propOrder = {"pt"})
|
||||
public final class CurveToCommand implements PathCommand {
|
||||
public final class CurveToCommand implements CurveToCommandIf {
|
||||
|
||||
// @XmlElement(required = true)
|
||||
private final AdjustPoint pt1 = new AdjustPoint();
|
||||
@ -52,38 +52,45 @@ public final class CurveToCommand implements PathCommand {
|
||||
// @XmlElement(required = true)
|
||||
private final AdjustPoint pt3 = new AdjustPoint();
|
||||
|
||||
public void setPt1(AdjustPoint pt1) {
|
||||
@Override
|
||||
public AdjustPoint getPt1() {
|
||||
return pt1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPt1(AdjustPointIf pt1) {
|
||||
if (pt1 != null) {
|
||||
this.pt1.setX(pt1.getX());
|
||||
this.pt1.setY(pt1.getY());
|
||||
}
|
||||
}
|
||||
|
||||
public void setPt2(AdjustPoint pt2) {
|
||||
@Override
|
||||
public AdjustPoint getPt2() {
|
||||
return pt2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPt2(AdjustPointIf pt2) {
|
||||
if (pt2 != null) {
|
||||
this.pt2.setX(pt2.getX());
|
||||
this.pt2.setY(pt2.getY());
|
||||
}
|
||||
}
|
||||
|
||||
public void setPt3(AdjustPoint pt3) {
|
||||
@Override
|
||||
public AdjustPoint getPt3() {
|
||||
return pt3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPt3(AdjustPointIf pt3) {
|
||||
if (pt3 != null) {
|
||||
this.pt3.setX(pt3.getX());
|
||||
this.pt3.setY(pt3.getY());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(Path2D.Double path, Context ctx){
|
||||
double x1 = ctx.getValue(pt1.getX());
|
||||
double y1 = ctx.getValue(pt1.getY());
|
||||
double x2 = ctx.getValue(pt2.getX());
|
||||
double y2 = ctx.getValue(pt2.getY());
|
||||
double x3 = ctx.getValue(pt3.getX());
|
||||
double y3 = ctx.getValue(pt3.getY());
|
||||
path.curveTo(x1, y1, x2, y2, x3, y3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
|
@ -0,0 +1,50 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
import java.awt.geom.Path2D;
|
||||
|
||||
public interface CurveToCommandIf extends PathCommand {
|
||||
|
||||
AdjustPointIf getPt1();
|
||||
|
||||
void setPt1(AdjustPointIf pt1);
|
||||
|
||||
AdjustPointIf getPt2();
|
||||
|
||||
void setPt2(AdjustPointIf pt2);
|
||||
|
||||
AdjustPointIf getPt3();
|
||||
|
||||
void setPt3(AdjustPointIf pt3);
|
||||
|
||||
|
||||
@Override
|
||||
default void execute(Path2D.Double path, Context ctx){
|
||||
AdjustPointIf pt1 = getPt1();
|
||||
double x1 = ctx.getValue(pt1.getX());
|
||||
double y1 = ctx.getValue(pt1.getY());
|
||||
AdjustPointIf pt2 = getPt2();
|
||||
double x2 = ctx.getValue(pt2.getX());
|
||||
double y2 = ctx.getValue(pt2.getY());
|
||||
AdjustPointIf pt3 = getPt3();
|
||||
double x3 = ctx.getValue(pt3.getX());
|
||||
double y3 = ctx.getValue(pt3.getY());
|
||||
path.curveTo(x1, y1, x2, y2, x3, y3);
|
||||
}
|
||||
}
|
@ -49,19 +49,19 @@ import java.util.Objects;
|
||||
* </complexType>
|
||||
* </pre>
|
||||
*/
|
||||
public final class CustomGeometry implements Iterable<Path>{
|
||||
final List<AdjustValue> adjusts = new ArrayList<>();
|
||||
final List<Guide> guides = new ArrayList<>();
|
||||
final List<Path> paths = new ArrayList<>();
|
||||
public final class CustomGeometry implements Iterable<PathIf>{
|
||||
final List<AdjustValueIf> adjusts = new ArrayList<>();
|
||||
final List<GuideIf> guides = new ArrayList<>();
|
||||
final List<PathIf> paths = new ArrayList<>();
|
||||
final List<AdjustHandle> handles = new ArrayList<>();
|
||||
final List<ConnectionSite> connections = new ArrayList<>();
|
||||
final List<ConnectionSiteIf> connections = new ArrayList<>();
|
||||
Path textBounds;
|
||||
|
||||
public void addAdjustGuide(AdjustValue guide) {
|
||||
public void addAdjustGuide(AdjustValueIf guide) {
|
||||
adjusts.add(guide);
|
||||
}
|
||||
|
||||
public void addGeomGuide(Guide guide) {
|
||||
public void addGeomGuide(GuideIf guide) {
|
||||
guides.add(guide);
|
||||
}
|
||||
|
||||
@ -69,11 +69,11 @@ public final class CustomGeometry implements Iterable<Path>{
|
||||
handles.add(handle);
|
||||
}
|
||||
|
||||
public void addConnectionSite(ConnectionSite connection) {
|
||||
public void addConnectionSite(ConnectionSiteIf connection) {
|
||||
connections.add(connection);
|
||||
}
|
||||
|
||||
public void addPath(Path path) {
|
||||
public void addPath(PathIf path) {
|
||||
paths.add(path);
|
||||
}
|
||||
|
||||
@ -106,7 +106,7 @@ public final class CustomGeometry implements Iterable<Path>{
|
||||
|
||||
|
||||
@Override
|
||||
public Iterator<Path> iterator() {
|
||||
public Iterator<PathIf> iterator() {
|
||||
return paths.iterator();
|
||||
}
|
||||
|
||||
|
@ -19,10 +19,7 @@
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
import static java.lang.Math.*;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* <p>Java class for CT_GeomGuide complex type.
|
||||
@ -44,12 +41,7 @@ import java.util.regex.Pattern;
|
||||
*/
|
||||
// @XmlAccessorType(XmlAccessType.FIELD)
|
||||
// @XmlType(name = "CT_GeomGuide")
|
||||
public class Guide implements Formula {
|
||||
enum Op {
|
||||
muldiv,addsub,adddiv,ifelse,val,abs,sqrt,max,min,at2,sin,cos,tan,cat2,sat2,pin,mod
|
||||
}
|
||||
|
||||
private static final Pattern WHITESPACE = Pattern.compile("\\s+");
|
||||
public class Guide implements GuideIf {
|
||||
|
||||
// @XmlAttribute(name = "name", required = true)
|
||||
// @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
|
||||
@ -57,97 +49,27 @@ public class Guide implements Formula {
|
||||
// @XmlAttribute(name = "fmla", required = true)
|
||||
private String fmla;
|
||||
|
||||
private Op op;
|
||||
private String[] operands;
|
||||
|
||||
@Override
|
||||
public String getName(){
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFmla() {
|
||||
return fmla;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFmla(String fmla) {
|
||||
this.fmla = fmla;
|
||||
operands = WHITESPACE.split(fmla);
|
||||
switch (operands[0]) {
|
||||
case "*/": op = Op.muldiv; break;
|
||||
case "+-": op = Op.addsub; break;
|
||||
case "+/": op = Op.adddiv; break;
|
||||
case "?:": op = Op.ifelse; break;
|
||||
default: op = Op.valueOf(operands[0]); break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public double evaluate(Context ctx) {
|
||||
double x = (operands.length > 1) ? ctx.getValue(operands[1]) : 0;
|
||||
double y = (operands.length > 2) ? ctx.getValue(operands[2]) : 0;
|
||||
double z = (operands.length > 3) ? ctx.getValue(operands[3]) : 0;
|
||||
switch (op) {
|
||||
case abs:
|
||||
// Absolute Value Formula
|
||||
return abs(x);
|
||||
case adddiv:
|
||||
// Add Divide Formula
|
||||
return (z == 0) ? 0 : (x + y) / z;
|
||||
case addsub:
|
||||
// Add Subtract Formula
|
||||
return (x + y) - z;
|
||||
case at2:
|
||||
// ArcTan Formula: "at2 x y" = arctan( y / z ) = value of this guide
|
||||
return toDegrees(atan2(y, x)) * OOXML_DEGREE;
|
||||
case cos:
|
||||
// Cosine Formula: "cos x y" = (x * cos( y )) = value of this guide
|
||||
return x * cos(toRadians(y / OOXML_DEGREE));
|
||||
case cat2:
|
||||
// Cosine ArcTan Formula: "cat2 x y z" = (x * cos(arctan(z / y) )) = value of this guide
|
||||
return x * cos(atan2(z, y));
|
||||
case ifelse:
|
||||
// If Else Formula: "?: x y z" = if (x > 0), then y = value of this guide,
|
||||
// else z = value of this guide
|
||||
return x > 0 ? y : z;
|
||||
case val:
|
||||
// Literal Value Expression
|
||||
return x;
|
||||
case max:
|
||||
// Maximum Value Formula
|
||||
return max(x, y);
|
||||
case min:
|
||||
// Minimum Value Formula
|
||||
return min(x, y);
|
||||
case mod:
|
||||
// Modulo Formula: "mod x y z" = sqrt(x^2 + b^2 + c^2) = value of this guide
|
||||
return sqrt(x*x + y*y + z*z);
|
||||
case muldiv:
|
||||
// Multiply Divide Formula
|
||||
return (z == 0) ? 0 : (x * y) / z;
|
||||
case pin:
|
||||
// Pin To Formula: "pin x y z" = if (y < x), then x = value of this guide
|
||||
// else if (y > z), then z = value of this guide
|
||||
// else y = value of this guide
|
||||
return max(x, min(y, z));
|
||||
case sat2:
|
||||
// Sine ArcTan Formula: "sat2 x y z" = (x*sin(arctan(z / y))) = value of this guide
|
||||
return x * sin(atan2(z, y));
|
||||
case sin:
|
||||
// Sine Formula: "sin x y" = (x * sin( y )) = value of this guide
|
||||
return x * sin(toRadians(y / OOXML_DEGREE));
|
||||
case sqrt:
|
||||
// Square Root Formula: "sqrt x" = sqrt(x) = value of this guide
|
||||
return sqrt(x);
|
||||
case tan:
|
||||
// Tangent Formula: "tan x y" = (x * tan( y )) = value of this guide
|
||||
return x * tan(toRadians(y / OOXML_DEGREE));
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
|
120
poi/src/main/java/org/apache/poi/sl/draw/geom/GuideIf.java
Normal file
120
poi/src/main/java/org/apache/poi/sl/draw/geom/GuideIf.java
Normal file
@ -0,0 +1,120 @@
|
||||
/*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
import static java.lang.Math.*;
|
||||
import static java.lang.Math.toRadians;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public interface GuideIf extends Formula {
|
||||
enum Op {
|
||||
muldiv,addsub,adddiv,ifelse,val,abs,sqrt,max,min,at2,sin,cos,tan,cat2,sat2,pin,mod
|
||||
}
|
||||
|
||||
Pattern WHITESPACE = Pattern.compile("\\s+");
|
||||
|
||||
String getName();
|
||||
|
||||
void setName(String name);
|
||||
|
||||
String getFmla();
|
||||
|
||||
void setFmla(String fmla);
|
||||
|
||||
@Override
|
||||
default double evaluate(Context ctx) {
|
||||
return evaluateGuide(ctx);
|
||||
}
|
||||
|
||||
default double evaluateGuide(Context ctx) {
|
||||
Guide.Op op;
|
||||
String[] operands = WHITESPACE.split(getFmla());
|
||||
switch (operands[0]) {
|
||||
case "*/": op = Guide.Op.muldiv; break;
|
||||
case "+-": op = Guide.Op.addsub; break;
|
||||
case "+/": op = Guide.Op.adddiv; break;
|
||||
case "?:": op = Guide.Op.ifelse; break;
|
||||
default: op = Guide.Op.valueOf(operands[0]); break;
|
||||
}
|
||||
|
||||
double x = (operands.length > 1) ? ctx.getValue(operands[1]) : 0;
|
||||
double y = (operands.length > 2) ? ctx.getValue(operands[2]) : 0;
|
||||
double z = (operands.length > 3) ? ctx.getValue(operands[3]) : 0;
|
||||
switch (op) {
|
||||
case abs:
|
||||
// Absolute Value Formula
|
||||
return abs(x);
|
||||
case adddiv:
|
||||
// Add Divide Formula
|
||||
return (z == 0) ? 0 : (x + y) / z;
|
||||
case addsub:
|
||||
// Add Subtract Formula
|
||||
return (x + y) - z;
|
||||
case at2:
|
||||
// ArcTan Formula: "at2 x y" = arctan( y / z ) = value of this guide
|
||||
return toDegrees(atan2(y, x)) * OOXML_DEGREE;
|
||||
case cos:
|
||||
// Cosine Formula: "cos x y" = (x * cos( y )) = value of this guide
|
||||
return x * cos(toRadians(y / OOXML_DEGREE));
|
||||
case cat2:
|
||||
// Cosine ArcTan Formula: "cat2 x y z" = (x * cos(arctan(z / y) )) = value of this guide
|
||||
return x * cos(atan2(z, y));
|
||||
case ifelse:
|
||||
// If Else Formula: "?: x y z" = if (x > 0), then y = value of this guide,
|
||||
// else z = value of this guide
|
||||
return x > 0 ? y : z;
|
||||
case val:
|
||||
// Literal Value Expression
|
||||
return x;
|
||||
case max:
|
||||
// Maximum Value Formula
|
||||
return max(x, y);
|
||||
case min:
|
||||
// Minimum Value Formula
|
||||
return min(x, y);
|
||||
case mod:
|
||||
// Modulo Formula: "mod x y z" = sqrt(x^2 + b^2 + c^2) = value of this guide
|
||||
return sqrt(x*x + y*y + z*z);
|
||||
case muldiv:
|
||||
// Multiply Divide Formula
|
||||
return (z == 0) ? 0 : (x * y) / z;
|
||||
case pin:
|
||||
// Pin To Formula: "pin x y z" = if (y < x), then x = value of this guide
|
||||
// else if (y > z), then z = value of this guide
|
||||
// else y = value of this guide
|
||||
return max(x, min(y, z));
|
||||
case sat2:
|
||||
// Sine ArcTan Formula: "sat2 x y z" = (x*sin(arctan(z / y))) = value of this guide
|
||||
return x * sin(atan2(z, y));
|
||||
case sin:
|
||||
// Sine Formula: "sin x y" = (x * sin( y )) = value of this guide
|
||||
return x * sin(toRadians(y / OOXML_DEGREE));
|
||||
case sqrt:
|
||||
// Square Root Formula: "sqrt x" = sqrt(x) = value of this guide
|
||||
return sqrt(x);
|
||||
case tan:
|
||||
// Tangent Formula: "tan x y" = (x * tan( y )) = value of this guide
|
||||
return x * tan(toRadians(y / OOXML_DEGREE));
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -31,5 +31,5 @@ public interface IAdjustableShape {
|
||||
* @param name name of a adjust value, e.g. adj1
|
||||
* @return adjust guide defined in the shape or null
|
||||
*/
|
||||
Guide getAdjustValue(String name);
|
||||
GuideIf getAdjustValue(String name);
|
||||
}
|
||||
|
@ -19,7 +19,6 @@
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
import java.awt.geom.Path2D;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@ -43,29 +42,24 @@ import java.util.Objects;
|
||||
*/
|
||||
// @XmlAccessorType(XmlAccessType.FIELD)
|
||||
// @XmlType(name = "CT_Path2DLineTo", propOrder = {"pt"})
|
||||
public final class LineToCommand implements PathCommand {
|
||||
public final class LineToCommand implements LineToCommandIf {
|
||||
|
||||
// @XmlElement(required = true)
|
||||
private final AdjustPoint pt = new AdjustPoint();
|
||||
|
||||
@Override
|
||||
public AdjustPoint getPt() {
|
||||
return pt;
|
||||
}
|
||||
|
||||
public void setPt(AdjustPoint pt) {
|
||||
@Override
|
||||
public void setPt(AdjustPointIf pt) {
|
||||
if (pt != null) {
|
||||
this.pt.setX(pt.getX());
|
||||
this.pt.setY(pt.getY());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(Path2D.Double path, Context ctx){
|
||||
double x = ctx.getValue(pt.getX());
|
||||
double y = ctx.getValue(pt.getY());
|
||||
path.lineTo(x, y);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
|
@ -0,0 +1,35 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
import java.awt.geom.Path2D;
|
||||
|
||||
public interface LineToCommandIf extends PathCommand {
|
||||
|
||||
AdjustPointIf getPt();
|
||||
|
||||
void setPt(AdjustPointIf pt);
|
||||
|
||||
@Override
|
||||
default void execute(Path2D.Double path, Context ctx){
|
||||
AdjustPointIf pt = getPt();
|
||||
double x = ctx.getValue(pt.getX());
|
||||
double y = ctx.getValue(pt.getY());
|
||||
path.lineTo(x, y);
|
||||
}
|
||||
}
|
@ -19,7 +19,6 @@
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
import java.awt.geom.Path2D;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@ -43,30 +42,24 @@ import java.util.Objects;
|
||||
*/
|
||||
// @XmlAccessorType(XmlAccessType.FIELD)
|
||||
// @XmlType(name = "CT_Path2DMoveTo", propOrder = {"pt"})
|
||||
public final class MoveToCommand implements PathCommand {
|
||||
public final class MoveToCommand implements MoveToCommandIf {
|
||||
|
||||
// @XmlElement(required = true)
|
||||
private final AdjustPoint pt = new AdjustPoint();
|
||||
|
||||
@Override
|
||||
public AdjustPoint getPt() {
|
||||
return pt;
|
||||
}
|
||||
|
||||
public void setPt(AdjustPoint pt) {
|
||||
@Override
|
||||
public void setPt(AdjustPointIf pt) {
|
||||
if (pt != null) {
|
||||
this.pt.setX(pt.getX());
|
||||
this.pt.setY(pt.getY());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(Path2D.Double path, Context ctx){
|
||||
double x = ctx.getValue(pt.getX());
|
||||
double y = ctx.getValue(pt.getY());
|
||||
path.moveTo(x, y);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
|
@ -0,0 +1,35 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
import java.awt.geom.Path2D;
|
||||
|
||||
public interface MoveToCommandIf extends PathCommand {
|
||||
|
||||
AdjustPointIf getPt();
|
||||
|
||||
void setPt(AdjustPointIf pt);
|
||||
|
||||
@Override
|
||||
default void execute(Path2D.Double path, Context ctx){
|
||||
AdjustPointIf pt = getPt();
|
||||
double x = ctx.getValue(pt.getX());
|
||||
double y = ctx.getValue(pt.getY());
|
||||
path.moveTo(x, y);
|
||||
}
|
||||
}
|
@ -22,15 +22,15 @@ package org.apache.poi.sl.draw.geom;
|
||||
import java.awt.Shape;
|
||||
|
||||
public class Outline {
|
||||
private Shape shape;
|
||||
private Path path;
|
||||
private final Shape shape;
|
||||
private final PathIf path;
|
||||
|
||||
public Outline(Shape shape, Path path){
|
||||
public Outline(Shape shape, PathIf path){
|
||||
this.shape = shape;
|
||||
this.path = path;
|
||||
}
|
||||
|
||||
public Path getPath(){
|
||||
public PathIf getPath(){
|
||||
return path;
|
||||
}
|
||||
|
||||
|
@ -58,7 +58,7 @@ import org.apache.poi.sl.usermodel.PaintStyle.PaintModifier;
|
||||
*/
|
||||
// @XmlAccessorType(XmlAccessType.FIELD)
|
||||
// @XmlType(name = "CT_Path2D", propOrder = {"closeOrMoveToOrLnTo"})
|
||||
public final class Path {
|
||||
public final class Path implements PathIf {
|
||||
|
||||
// @XmlElements({
|
||||
// @XmlElement(name = "close", type = CTPath2DClose.class),
|
||||
@ -82,6 +82,7 @@ public final class Path {
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void addCommand(PathCommand cmd){
|
||||
commands.add(cmd);
|
||||
}
|
||||
@ -89,6 +90,7 @@ public final class Path {
|
||||
/**
|
||||
* Convert the internal represenation to java.awt.geom.Path2D
|
||||
*/
|
||||
@Override
|
||||
public Path2D.Double getPath(Context ctx) {
|
||||
Path2D.Double path = new Path2D.Double();
|
||||
for(PathCommand cmd : commands) {
|
||||
@ -97,46 +99,57 @@ public final class Path {
|
||||
return path;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isStroked(){
|
||||
return stroke;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStroke(boolean stroke) {
|
||||
this.stroke = stroke;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFilled(){
|
||||
return fill != PaintModifier.NONE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaintModifier getFill() {
|
||||
return fill;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFill(PaintModifier fill) {
|
||||
this.fill = fill;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getW(){
|
||||
return w;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setW(long w) {
|
||||
this.w = w;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getH(){
|
||||
return h;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setH(long h) {
|
||||
this.h = h;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isExtrusionOk() {
|
||||
return extrusionOk;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setExtrusionOk(boolean extrusionOk) {
|
||||
this.extrusionOk = extrusionOk;
|
||||
}
|
||||
|
55
poi/src/main/java/org/apache/poi/sl/draw/geom/PathIf.java
Normal file
55
poi/src/main/java/org/apache/poi/sl/draw/geom/PathIf.java
Normal file
@ -0,0 +1,55 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
import java.awt.geom.Path2D;
|
||||
|
||||
import org.apache.poi.sl.usermodel.PaintStyle;
|
||||
|
||||
public interface PathIf {
|
||||
|
||||
void addCommand(PathCommand cmd);
|
||||
|
||||
/**
|
||||
* Convert the internal represenation to java.awt.geom.Path2D
|
||||
*/
|
||||
Path2D.Double getPath(Context ctx);
|
||||
|
||||
boolean isStroked();
|
||||
|
||||
void setStroke(boolean stroke);
|
||||
|
||||
boolean isFilled();
|
||||
|
||||
PaintStyle.PaintModifier getFill();
|
||||
|
||||
void setFill(PaintStyle.PaintModifier fill);
|
||||
|
||||
long getW();
|
||||
|
||||
void setW(long w);
|
||||
|
||||
long getH();
|
||||
|
||||
void setH(long h);
|
||||
|
||||
boolean isExtrusionOk();
|
||||
|
||||
void setExtrusionOk(boolean extrusionOk);
|
||||
|
||||
}
|
@ -31,13 +31,9 @@ import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.XMLStreamReader;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.poi.util.XMLHelper;
|
||||
|
||||
public final class PresetGeometries {
|
||||
private static final Logger LOG = LogManager.getLogger(PresetGeometries.class);
|
||||
|
||||
private final Map<String, CustomGeometry> map = new TreeMap<>();
|
||||
|
||||
private static class SingletonHelper{
|
||||
@ -57,7 +53,7 @@ public final class PresetGeometries {
|
||||
try {
|
||||
PresetParser p = new PresetParser(PresetParser.Mode.FILE);
|
||||
p.parse(sr);
|
||||
p.getGeom().forEach(map::put);
|
||||
map.putAll(p.getGeom());
|
||||
} finally {
|
||||
sr.close();
|
||||
}
|
||||
@ -67,20 +63,6 @@ public final class PresetGeometries {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a single CustomGeometry object, i.e. from xmlbeans
|
||||
*/
|
||||
public static CustomGeometry convertCustomGeometry(XMLStreamReader staxReader) {
|
||||
try {
|
||||
PresetParser p = new PresetParser(PresetParser.Mode.SHAPE);
|
||||
p.parse(staxReader);
|
||||
return p.getGeom().values().stream().findFirst().orElse(null);
|
||||
} catch (XMLStreamException e) {
|
||||
LOG.atError().withThrowable(e).log("Unable to parse single custom geometry");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public CustomGeometry get(String name) {
|
||||
return name == null ? null : map.get(name);
|
||||
}
|
||||
|
@ -19,7 +19,6 @@
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
import java.awt.geom.Path2D;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@ -43,36 +42,39 @@ import java.util.Objects;
|
||||
*/
|
||||
// @XmlAccessorType(XmlAccessType.FIELD)
|
||||
// @XmlType(name = "CT_Path2DQuadBezierTo", propOrder = {"pt"})
|
||||
public final class QuadToCommand implements PathCommand {
|
||||
public final class QuadToCommand implements QuadToCommandIf {
|
||||
|
||||
// @XmlElement(required = true)
|
||||
private final AdjustPoint pt1 = new AdjustPoint();
|
||||
// @XmlElement(required = true)
|
||||
private final AdjustPoint pt2 = new AdjustPoint();
|
||||
|
||||
public void setPt1(AdjustPoint pt1) {
|
||||
@Override
|
||||
public AdjustPoint getPt1() {
|
||||
return pt1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPt1(AdjustPointIf pt1) {
|
||||
if (pt1 != null) {
|
||||
this.pt1.setX(pt1.getX());
|
||||
this.pt1.setY(pt1.getY());
|
||||
}
|
||||
}
|
||||
|
||||
public void setPt2(AdjustPoint pt2) {
|
||||
@Override
|
||||
public AdjustPoint getPt2() {
|
||||
return pt2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPt2(AdjustPointIf pt2) {
|
||||
if (pt2 != null) {
|
||||
this.pt2.setX(pt2.getX());
|
||||
this.pt2.setY(pt2.getY());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(Path2D.Double path, Context ctx){
|
||||
double x1 = ctx.getValue(pt1.getX());
|
||||
double y1 = ctx.getValue(pt1.getY());
|
||||
double x2 = ctx.getValue(pt2.getX());
|
||||
double y2 = ctx.getValue(pt2.getY());
|
||||
path.quadTo(x1, y1, x2, y2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
|
@ -0,0 +1,42 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
import java.awt.geom.Path2D;
|
||||
|
||||
public interface QuadToCommandIf extends PathCommand {
|
||||
|
||||
AdjustPointIf getPt1();
|
||||
|
||||
void setPt1(AdjustPointIf pt1);
|
||||
|
||||
AdjustPointIf getPt2();
|
||||
|
||||
void setPt2(AdjustPointIf pt2);
|
||||
|
||||
@Override
|
||||
default void execute(Path2D.Double path, Context ctx){
|
||||
AdjustPointIf pt1 = getPt1();
|
||||
double x1 = ctx.getValue(pt1.getX());
|
||||
double y1 = ctx.getValue(pt1.getY());
|
||||
AdjustPointIf pt2 = getPt2();
|
||||
double x2 = ctx.getValue(pt2.getX());
|
||||
double y2 = ctx.getValue(pt2.getY());
|
||||
path.quadTo(x1, y1, x2, y2);
|
||||
}
|
||||
}
|
@ -24,10 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertSame;
|
||||
|
||||
import java.awt.geom.Path2D;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.net.URL;
|
||||
import java.util.Enumeration;
|
||||
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class TestPresetGeometries {
|
||||
@ -40,7 +37,7 @@ class TestPresetGeometries {
|
||||
for(String name : shapes.keySet()) {
|
||||
CustomGeometry geom = shapes.get(name);
|
||||
Context ctx = new Context(geom, new Rectangle2D.Double(0, 0, 100, 100), presetName -> null);
|
||||
for(Path p : geom){
|
||||
for(PathIf p : geom){
|
||||
Path2D path = p.getPath(ctx);
|
||||
assertNotNull(path);
|
||||
}
|
||||
@ -49,24 +46,4 @@ class TestPresetGeometries {
|
||||
// we get the same instance on further calls
|
||||
assertSame(shapes, PresetGeometries.getInstance());
|
||||
}
|
||||
|
||||
@Disabled("problem solved? Turn back on if this debugging is still in process.")
|
||||
void testCheckXMLParser() throws Exception{
|
||||
// Gump reports a strange error because of an unavailable XML Parser, let's try to find out where
|
||||
// this comes from
|
||||
//
|
||||
Enumeration<URL> resources = this.getClass().getClassLoader().getResources("META-INF/services/javax.xml.stream.XMLEventFactory");
|
||||
printURLs(resources);
|
||||
resources = ClassLoader.getSystemResources("META-INF/services/javax.xml.stream.XMLEventFactory");
|
||||
printURLs(resources);
|
||||
resources = ClassLoader.getSystemResources("org/apache/poi/sl/draw/geom/presetShapeDefinitions.xml");
|
||||
printURLs(resources);
|
||||
}
|
||||
|
||||
private void printURLs(Enumeration<URL> resources) {
|
||||
while(resources.hasMoreElements()) {
|
||||
URL url = resources.nextElement();
|
||||
System.out.println("URL: " + url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user