背景:java,家谱图导出,主要包括家庭成员图片以及有关系进行连线
项目环境请参考
https://download.csdn.net/download/weixin_49456013/20085264
或者是参考我关于Aspose相关的文章,自己搭建项目
业务代码如下:
DemoController
@GetMapping("/exportVisio")
public void exportVisio(HttpServletRequest request, HttpServletResponse response){
demoService.exportVisio(request, response);
}
DemoService
void exportVisio(HttpServletRequest request, HttpServletResponse response);
DemoServiceImpl
@Override
public void exportVisio(HttpServletRequest request, HttpServletResponse response) {
try {
// 去除水印和数量限制
Resource resource = new ClassPathResource("license.xml");
InputStream is = resource.getInputStream();
License license= new License();
license.setLicense(is);
// 画图表
Resource resource1 = new ClassPathResource("basic.vss");
InputStream stream = resource1.getInputStream();
Diagram diagram = new Diagram(stream);
Page page0 = diagram.getPages().get(0);
//插入图片
double pinX = 2, pinY = 2, width = 4, hieght = 3;
URL url = new URL("https://t7.baidu.com/it/u=3818512871,2061378298&fm=193&f=GIF");
//打开链接
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//通过输入流获取图片数据
InputStream inStream = conn.getInputStream();
long one = page0.addShape(pinX, pinY, width, hieght,inStream );
//这样写图片的边框会带有颜色,修改边框颜色为白色
page0.getShapes().getShape(one).getLine().getLineColor().setValue("#FFFFFF");
//在指定位置插入文本图形
page0.addText(1, 1, 1, 1, "文本文本");
//将所有的文本填充模式设置为不填充
for (Shape shape : (Iterable<Shape>) page0.getShapes()) {
if (shape.getText().getValue().getText() != ""){
shape.getFill().setFillPattern(new IntValue(0,0));
}
}
//也可以在插入的图片上面增加文字
page0.getShapes().getShape(one ).getText().getValue().add(new Cp(0));
page0.getShapes().getShape(one ).getText().getValue()
.add(new Txt("TextStyle_Regular\n"));
//本地图片插入
long two = page0.addShape(pinX, pinY, width, hieght, new FileInputStream("d:\\aa.png"));
//连线
Shape connector1 = new Shape();
long connecter1Id = diagram.addShape(connector1, "Dynamic connector", 0);
diagram.getPages().getPage(0).connectShapesViaConnector(two, ConnectionPointPlace.CENTER,
one, ConnectionPointPlace.CENTER, connecter1Id);
//返回流数据到前端
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment;filename="
+ "export.vsdx");
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
DiagramSaveOptions options = new DiagramSaveOptions(SaveFileFormat.VSDX);
options.setAutoFitPageToDrawingContent(true);
diagram.save(outputStream, options);
//强制将缓存区的数据进行输出
outputStream.flush();
//关流
outputStream.close();
conn.disconnect();
inStream.close();
} catch (Exception e){
e.printStackTrace();
}
}