python OA流程图xml文件画图 graphviz的使用

下面的公文发文的流程图,虽然流程环节有坐标信息,但graphviz设置pos参数效果也不是太好  

问题在于如何为流程环节设置绝对坐标

 

D:\Study\myproject\Python_auto_office\flow_report\utils\draw_image.py

'''通过xml流程文件绘制流程图'''
import graphviz  # doctest: +NO_EXE
import get_diy_obj_list as gd
#变量
#流程id
#输入xml路径,输出的目录,图的名字
def draw_image(xml_path,result_path,name):#获取两个自定义的数据类型activity_obj_list = gd.get_activity_obj_list(xml_path)#对环节自定义的数据类型列表进行排序# activity_obj_list.sort(cmp=None,key=lambda x:x. sa )activity_new_obj_list = sorted(activity_obj_list,key=lambda y:(int(y.activity_y)))for each in activity_new_obj_list:print("############")print(each.activity_id)print(each.activity_name)print(each.activity_x)print(each.activity_y)print("############")transition_obj_list=gd.get_transition_obj_list(xml_path)#环节id列表activity_id_list=[]for each in activity_new_obj_list:activity_id_list.append(each.activity_id)#环节name列表activity_name_list=[]for each in activity_new_obj_list:activity_name_list.append(each.activity_name)#环节x坐标列表activity_x_list=[]for each in activity_new_obj_list:activity_x_list.append(each.activity_x)#环节y坐标列表activity_y_list=[]for each in activity_new_obj_list:activity_y_list.append(each.activity_y)# print("y坐标列表")# print(activity_y_list)#连线from列表transition_from_list=[]for each in transition_obj_list:transition_from_list.append(each.transition_from)#连线to列表transition_to_list=[]for each in transition_obj_list:transition_to_list.append(each.transition_to)#连线标签列表transition_name_list=[]for each in transition_obj_list:transition_name_list.append(each.transition_name)dot = graphviz.Digraph(name='我的流程图',comment='添加到源码第一行的注释',filename=name,directory=None,format='png', #bmp gif ico jpg json pdf png svg tifengine='dot',#dot neato fdpencoding='utf8',# graph_attr={'rankdir':'TB','splines':'ortho'},graph_attr={'rankdir':'TB',#布局方式从上到下'splines':'spline'#  弧线 curved(不行)折线 ortho(不行)  直线 polyline(不行 ) 线 line(不行) 线 spline(ok)},node_attr={'color':'green','fontcolor':'brown','fontname':'FangSong','fontsize':'10','style':'rounded','shape':'box'},edge_attr={'color':'red','fontcolor':'#000FF0','fontsize':'10','fontname':'FangSong','arrowsize':'0.5'#箭头大小},body=None,strict=False
)i=0for activitie_id,activitie_name,activity_x,activity_y in zip(activity_id_list,activity_name_list,activity_x_list,activity_y_list):print(activitie_id)dot.node(activitie_id,activitie_name,{'shape':'rect','color':'green','fontcolor':'black','rank':'min','imagepos':'tc',#   'pos':str(int(activity_x))+','+str(int(activity_y)),#   'pin':'True'})for transition_from,transition_to,transitions_lab in zip(transition_from_list,transition_to_list,transition_name_list):dot.edge(transition_from,transition_to,label=transitions_lab)print(dot)  #doctest: +NORMALIZE_WHITESPACE# dot.view(directory="C:\\Users\\human\\Desktop\\")dot.view(directory=result_path)# dot.view()

D:\Study\myproject\Python_auto_office\flow_report\utils\get_diy_obj_list.py

自定义对像的包

#001.导入个性化操作xml的包
import xml_handle as xh
#002.导入环节的数据类型
import activity_class as ac
#003.导入连线的数据类型
import transition_class as tc#xml路径
#绘图
# activity_id,
# activity_name,
# activity_x,
# activity_y,
# transition_id,
# transition_name,
# transition_from,
# transition_to,
# transition_lab
#输入xml的路径
#返回一个自定义环节对象列表
def get_activity_obj_list(full_name_path):#01.用于存放绘图自定义数据对象列表activity_obj_list=[]#环节#02.环节idactivity_id= xh.get_activity_id_list(full_name_path)#03.环节nameactivity_name= xh.get_activity_name_list(full_name_path)#04.环节x坐标activity_x = xh.get_activity_x_list(full_name_path)#04.环节y坐标activity_y = xh.get_activity_y_list(full_name_path)# print(activity_id)# print(activity_name)# print(activity_x)# print(activity_y) for id,name,x,y in zip(activity_id,activity_name,activity_x,activity_y):     temp_ac=ac.activity(id,name,x,y)activity_obj_list.append(temp_ac)# print(draw_activity_list)return activity_obj_list   #返回一个自定义连线对象列表
def get_transition_obj_list(full_name_path):#01.用于存放绘图自定义数据对象列表transition_obj_list=[]#连线#02.连线idtransition_id= xh.get_transition_id_list(full_name_path)#03.连线nametransition_name= xh.get_transition_name_list(full_name_path)#04.连线起点transition_from = xh.get_transition_from_list(full_name_path)#04.连线终点transition_to = xh.get_transition_to_list(full_name_path)for id,name,t_from,t_to in zip(transition_id,transition_name,transition_from,transition_to):     temp_tc=tc.transition(id,name,t_from,t_to)transition_obj_list.append(temp_tc)return transition_obj_list   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/20798.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用OpenCV在图像上绘制质心

这段代码中已经实现了在图像上绘制质心的功能。质心,也称为重心,是物体质量分布的几何中心,可以通过物体质量和位置的加权平均来求得。 在这个程序中,图像的质心(重心)是通过计算像素强度(可以被看作是“质量”)的加权平均位置得到的。图像上每一个像素都有一个位置(…

谈谈VPN是什么、类型、使用场景、工作原理

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 前言 本文将讲解VPN是什么、以及它的类型、使用场景、工作原理。 目录 一、VPN是什么? 二、VPN的类型 1、站点对站点VPN 2、…

怎么把word转换成只有一页的长页PDF?

来百度APP畅享高清图片 要将Word文档打印成一长页的PDF格式,我们得先知道word转PDF的工作原理。word转pdf其实就是将word打印出来,就是跟你用物理打印机打印的原理是差不多的,所不同的是,PDF虚拟打印的原理是利用虚拟打印机驱动程…

对Vue组件化开发思想的一些理解

目录 组件的分类 为什么需要组件化开发 如何设计组件 组件间通信 组件系统是 Vue的一个重要概念,让我们可以用独立可复用的小组件来构建大型应用。几乎任意类型的应用的界面都可以抽象为一个组件树: 写一个 Vue 项目,其实就是在写一个个的…

达梦sql执行计划、HINT、索引简单应用

目录 收集统计信息. 3 1. 通过DBMS_STATS包中的方法. 3 2、删除指定表的统计信息. 3 执行计划. 3 常用执行计划操作符. 4 统计指定sql执行号的所有操作符的执行时间. 5 HINT 5 并行操作:. 6 查询计划重用、结果集重用. 7 示例. 8 1、收集统计信息&#x…

(中等)LeetCode 剑指OfferII 074. 合并区间

排序: 用数组merged存储最终的答案 首先,将列表中的区间按照左端点升序排序,将第一个区间加入merged数组中,并按顺序依次考虑之后的每个区间: 如果当前区间的左端点在数组merged中最后一个区间的右端点之后&#xf…

unity计时,1秒执行一次

1.核心代码示例 2.代码 using System.Collections; using System.Collections.Generic; using UnityEngine;public class AddRandomChilden : MonoBehaviour {// Debug.Log("开始进入update");float i 0;// Start is called before the first frame updatevoid Sta…

【问题分析解决】git添加.gitignore后不生效问题

一,问题现象 在已经提交过的git管理的项目中,新增加一个.gitignore文件,或者修改.gitignore文件之后,新增的内容不生效。 二,问题原因 因为我们误解了.gitignore文件的用途,该文件只能作用于Untracked F…

DSP(css)开发代码掉电保存下载到flash

DSP(css)开发代码掉电保存下载到flash 文章目录 DSP(css)开发代码掉电保存下载到flash source目录下删除28335_RAM_lnk.cmd,添加F28335.cmd和DSP2833x_MemCopy.c文件 main函数添加下列内容(一般添加在 Ini…

10.1.5 查询指令是否为 Bash shell 的内置命令: type

通过 type 这个指令我们可以知道每个指令是否为 bash 的内置指令。 此外,由于利用 type 搜寻后面的名称时,如果后面接的名称并不能以可执行文件的状态被找到, 那么该名称是不会被显示出来的。也就是说, type 主要在找出“可执行文…

【PHP面试题35】什么是MVC,为什么要使用它

文章目录 一、前言二、MVC介绍2.1 模型(Model)2.2 视图(View)2.3 控制器(Controller) 三、MVC模式的优点四、总结 一、前言 本文已收录于PHP全栈系列专栏:PHP面试专区。 计划将全覆盖PHP开发领域…

赋能智能智造-RK3568智能主板助力机器人产业高速发展

机器人作为现代制造业的重要一环,正在以惊人的速度推动着生产效率和智能化水平的提升,它们在生产线上的准确操作和高效工作,为企业带来了巨大的竞争优势。关于工业机器人的编程和控制技术,在过去几年中已经有了很多发展和新的应用…