我在Apache Poi < code > XSLFFreeformShape 中有一条多段线。
默认情况下,拐角连接样式显示为圆形。
如何设置为斜面或斜面?
我在超类<code>XSLFSimpleShape</code>支持的笔划样式方法中找不到连接样式。
编辑
这是我对其他行属性所做的:
private void applyLineState( @Nonnull XSLFFreeformShape shape) {
shape.setLineWidth( ...);
shape.setLineDash( ... );
shape.setLineColor( ... );
shape.setLineHeadDecoration(DecorationShape.NONE);
shape.setLineCap(LineCap.FLAT);
// Q: How to set join style for corners?
}
似乎直到现在,<code>apachepoi</code>还没有提供任何行连接属性的设置。但我们可以看看XSLFSimpleShape的源代码,了解如何设置其他CTLineProperties
。然后使用低级<code>org.openxmlformats.schemas.drawingml.x2006.main对所需的方法进行编程*类。
以下完整示例显示了这一点:
import java.io.FileOutputStream;
import org.apache.poi.xslf.usermodel.*;
import org.apache.poi.sl.usermodel.*;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.drawingml.x2006.main.*;
import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;
import java.awt.Rectangle;
import java.awt.geom.Path2D;
public class CreatePPTXFreeformShapeFromPath {
private static CTLineProperties getLn(XSLFShape shape) {
XmlObject o = shape.getXmlObject();
if (!(o instanceof CTShape)) return null;
CTShape sp = (CTShape)o;
CTShapeProperties spr = sp.getSpPr();
if (spr == null) return null;
return (spr.isSetLn()) ? spr.getLn() : spr.addNewLn();
}
private enum LineJoinProperty {
ROUND, MITER, BEVEL
}
public static void setLineJoinProperty(XSLFSimpleShape shape, LineJoinProperty property) {
CTLineProperties ln = getLn(shape);
if (ln == null) return;
if (ln.isSetBevel()) ln.unsetBevel();
if (ln.isSetMiter()) ln.unsetMiter();
if (ln.isSetRound()) ln.unsetRound();
if (property == LineJoinProperty.BEVEL) {
CTLineJoinBevel bevel = ln.addNewBevel();
} else if (property == LineJoinProperty.MITER) {
CTLineJoinMiterProperties miter = ln.addNewMiter();
} else if (property == LineJoinProperty.ROUND) {
CTLineJoinRound round = ln.addNewRound();
}
}
public static void main(String[] args) throws Exception {
XMLSlideShow slideShow = new XMLSlideShow();
XSLFSlide slide = slideShow.createSlide();
Path2D.Double path2D = new Path2D.Double();
path2D.moveTo(0d,0d);
path2D.lineTo(20d,0d);
path2D.lineTo(20d,20d);
path2D.lineTo(40d,20d);
path2D.lineTo(40d,40d);
path2D.lineTo(60d,40d);
path2D.lineTo(60d,60d);
path2D.lineTo(80d,60d);
path2D.lineTo(80d,80d);
path2D.lineTo(100d,80d);
path2D.lineTo(100d,100d);
path2D.closePath();
XSLFFreeformShape shape;
//default
shape = slide.createFreeform();
shape.setPath(path2D);
shape.setLineWidth(5.0);
shape.setLineColor(java.awt.Color.BLACK);
shape.setAnchor(new Rectangle(50, 100, 300, 300));
//miter
shape = slide.createFreeform();
shape.setPath(path2D);
shape.setLineWidth(5.0);
shape.setLineColor(java.awt.Color.BLACK);
shape.setAnchor(new Rectangle(200, 100, 300, 300));
setLineJoinProperty(shape, LineJoinProperty.MITER);
//bevel
shape = slide.createFreeform();
shape.setPath(path2D);
shape.setLineWidth(5.0);
shape.setLineColor(java.awt.Color.BLACK);
shape.setAnchor(new Rectangle(350, 100, 300, 300));
setLineJoinProperty(shape, LineJoinProperty.BEVEL);
FileOutputStream out = new FileOutputStream("CreatePPTXFreeformShapeFromPath.pptx");
slideShow.write(out);
out.close();
}
}
这是使用 apache poi 4.1.2
和 ooxml-schema-1.4.jar
进行测试的。请注意,此示例需要 ooxml-模式-1.4.jar
因为 poi-ooxml-模式-4.1.2.jar
只包含 apache poi 4.1.2
直接使用的组织.
我使用的是Apace POI 3.12操作系统:Mac操作系统
当我想部署我的项目时,我对tomcat有一个问题。构建步骤工作正常,但在部署期间,它给我以下错误: 我导入了apachepoi需要的所有库。以下是我在buildpath中的库: commons-csv-1.5。罐子 希望你能帮我
Apache Kafka:分布式消息传递系统 Apache Storm:实时消息处理 我们如何在实时数据管道中使用这两种技术来处理事件数据? 在实时数据管道方面,我觉得两者做的工作是一样的。如何在数据管道上同时使用这两种技术?
我正在使用Flink从Apache Pulsar读取数据。我在pulsar中有一个分区主题,有8个分区。在本主题中,我生成了1000条消息,分布在8个分区中。我的笔记本电脑中有8个内核,因此我有8个子任务(默认情况下,并行度=#个内核)。在执行Eclipse中的代码后,我打开了Flink UI,发现一些子任务没有收到任何记录(空闲)。我希望所有8个子任务都能得到利用(我希望每个子任务都映射到我的主
我们需要的是直接的API来设置和使用集群消息队列。我们最初的计划是使用Camel在集群JMS或ActiveMQ队列上进行消费/生产。Kafka如何使这项任务变得更容易?在任何一种情况下,应用程序本身都将在WebLogic服务器上运行。 消息传递将是点对点类型,其中有多个相同服务的实例在运行,但根据负载平衡策略,只有一个实例应该处理消息并发出结果。消息队列也是群集的,因此服务实例或队列实例的失败都不