最近我正在用Spring Boot与ApachePOI合作,我面临一个问题。我想表示实体之间的数据库连接,但我在可视化多个连接时遇到了问题<所以我的基本问题是分离连接。
以下是我的出发点:1
你看不见,但这两个矩形之间有多个连接,但由于相同的起点和终端,它们相互揭示。
生成的XML代码如下:
<p:cxnSp>
<p:nvCxnSpPr>
<p:cNvPr name="Connector 7" id="7" />
<p:cNvCxnSpPr>
<a:stCxn id="2" idx="3" />
<a:endCxn id="3" idx="1" />
</p:cNvCxnSpPr>
<p:nvPr />
</p:nvCxnSpPr>
<p:spPr>
<a:xfrm flipV="1">
<a:off y="2199409" x="2616200" />
<a:ext cy="1318491" cx="2413000" />
</a:xfrm>
<a:prstGeom prst="curvedConnector3">
<a:avLst />
</a:prstGeom>
<a:ln w="9525">
<a:solidFill>
<a:srgbClr val="000000" />
</a:solidFill>
</a:ln>
</p:spPr>
</p:cxnSp>
所以我想做的是用不同的值设置曲线的圆心中点,就像在这张图中(我手动做这个例子):2
我尝试向连接器添加其他GeomGuide元素,但结果是pptx文件不稳定,如下所示:
<a:prstGeom prst="curvedConnector3">
<a:avLst>
<a:gd name="adj1" fmla="val 57365" />
</a:avLst>
</a:prstGeom>
与此相关的java代码片段:
XSLFConnectorShape connector1 = slide.createConnector();
CTNonVisualConnectorProperties cx = ctConnector.getNvCxnSpPr().getCNvCxnSpPr();
CTConnection start = cx.addNewStCxn();
start.setId(shapeIdStart);
start.setIdx(rel.getStartSide());
CTConnection end = cx.addNewEndCxn();
end.setId(shapeIdEnd);
end.setIdx(rel.getEndSide());
CTGeomGuideList ctGeomGuideList = ctConnector.getSpPr().getPrstGeom().getAvLst();
CTGeomGuide ctGeomGuide = ctGeomGuideList.addNewGd();
ctGeomGuide.setName("adj");
ctGeomGuide.setFmla("val 45000");
您提供的代码片段不完整。因此不清楚这是否是唯一的问题。但是ctGeomGuide.setName("adj");
无论如何都是错误的。调整句柄是编号的,并且没有只称为adj
的调整句柄。它必须是ctGeomGuide.setName("adj1");
。
下面的代码是一个最小的、可复制的示例,它可以工作并创建您想要的结果。
import java.io.FileOutputStream;
import org.apache.poi.xslf.usermodel.*;
import org.apache.poi.sl.usermodel.*;
import org.openxmlformats.schemas.presentationml.x2006.main.*;
import org.openxmlformats.schemas.drawingml.x2006.main.*;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.awt.Color;
public class CreatePPTXConnectorShapes {
private static XSLFConnectorShape createConnector(XSLFSlide slide, XSLFAutoShape shape1, XSLFAutoShape shape2) {
XSLFConnectorShape connector = slide.createConnector();
connector.setShapeType(ShapeType.CURVED_CONNECTOR_3);
connector.setAnchor(new Rectangle2D.Double( //connector is diagonal in a rectangle
shape1.getAnchor().getMaxX(), // top left x of that rectangle is x position of right edge of shape1
shape2.getAnchor().getCenterY(), // top left y of that rectangle is center y of shape2 as shape2 is above shape1
shape2.getAnchor().getX()-shape1.getAnchor().getMaxX(), // width of that rectanle is x of shape2 minus x position of right edge of shape1 as shape2 is right of shape1
shape1.getAnchor().getCenterY()-shape2.getAnchor().getCenterY() // height of that rectanle is center y of shape1 minus center y of shape2 as shape2 is above shape1
));
connector.setFlipVertical(true); // the rectangle needs to be flipped vertically as the connector shall be diagonal from bottom left to top right
CTConnector ctConnector = (CTConnector)connector.getXmlObject();
CTNonVisualConnectorProperties cx = ctConnector.getNvCxnSpPr().getCNvCxnSpPr();
CTConnection start = cx.addNewStCxn();
start.setId(shape1.getShapeId());
start.setIdx(3); // connecting point 3 is center of right edge
CTConnection end = cx.addNewEndCxn();
end.setId(shape2.getShapeId());
end.setIdx(1); // connecting point 1 is center of left edge
return connector;
}
public static void main(String[] args) throws Exception {
XMLSlideShow slideShow = new XMLSlideShow();
XSLFSlide slide = slideShow.createSlide();
XSLFAutoShape shape1 = slide.createAutoShape();
shape1.setShapeType(ShapeType.RECT);
shape1.setFillColor(Color.GREEN);
shape1.setAnchor(new Rectangle(50, 150, 150, 100));
XSLFAutoShape shape2 = slide.createAutoShape();
shape2.setShapeType(ShapeType.RECT);
shape2.setFillColor(Color.GREEN);
shape2.setAnchor(new Rectangle(500, 50, 150, 100));
// first connector
XSLFConnectorShape connector1 = createConnector(slide, shape1, shape2);
CTConnector ctConnector = (CTConnector)connector1.getXmlObject();
CTGeomGuideList ctGeomGuideList = ctConnector.getSpPr().getPrstGeom().getAvLst();
CTGeomGuide ctGeomGuide = ctGeomGuideList.addNewGd();
ctGeomGuide.setName("adj1");
ctGeomGuide.setFmla("val 45000");
//second connector
XSLFConnectorShape connector2 = createConnector(slide, shape1, shape2);
ctConnector = (CTConnector)connector2.getXmlObject();
ctGeomGuideList = ctConnector.getSpPr().getPrstGeom().getAvLst();
ctGeomGuide = ctGeomGuideList.addNewGd();
ctGeomGuide.setName("adj1");
ctGeomGuide.setFmla("val 57365");
FileOutputStream out = new FileOutputStream("CreatePPTXConnectorShapes.pptx");
slideShow.write(out);
out.close();
}
}
Flink社区! 我有一个关于在Flink中连接相同键上的多个流的问题(等连接)。我还是一个新手,正在为我的团队评估Flink,将我们的Spark批处理应用程序迁移到流处理。 注意:我看了FabianHüske的这篇关于加入处理的文章:窥视Apache Flink的引擎室。 为了简化问题,假设您有3个流,每个流都有唯一的记录,可以通过id字段进行键控。对于流中的每条记录,您将在其他流中找到相应的记
我尝试使用批注将连接到 从数据库生成类。 例外情况是: null 有人有类似的问题吗?有什么解决办法吗?这可能是虫子吗?!
我想创建一个多边形从形状点。
我有一些Laravel多态模型,其中包括一个用户模型,可以有许多预订日历条目,可以有许多假日条目。我可以编写下面的SQL查询来提取所需的数据,但要与雄辩的查询版本作斗争。也许这是我的模型关系,或者我对拉拉维尔事物如何运作的理解。我有一些雄辩的查询确实有效,但是,它们非常低效,当我调查时,会使用许多选择,而不仅仅是一个。 我的SQL: 数据库表: 我想我的问题的症结在于预订日历有两个多态关系,因为它
在中,有些操作以的形式返回,但有些操作返回。这将使矩阵乘法更加繁琐,因为需要显式
我试图用s和每两个之间的连接线来进行类似网络的设计,但是当我用下面的JS函数使用和标记时,控制台显示了一个错误