Vba 将插入的EMF文件解组到Powerpoint时的失真
背景:我是一个Powerpoint插件的开发人员,该插件在Powerpoint中包含LaTeX显示。IguanaTex可以生成矢量图形显示(Powerpoint形状,通常为自由形式),方法是将EMF文件插入幻灯片中,将其解组,然后进行一些清理(删除额外形状、进一步解组、删除行等)。这些EMF文件通常是使用外部引擎()从LaTeX或用户希望转换为可编辑形状的PDF文件生成的(与LaTeX没有真正的关系,但整个代码库都提供了该功能,所以我将其放在了其中) 问题:我最近注意到以编程方式取消EMF文件分组时出现零星问题,而通过GUI取消同一文件分组不会导致错误。我已确认,这在运行Office 2010、Office 2016或Office 365的两台Windows 10计算机上发生 假设我们在Powerpoint中插入并获取以下图片对象: 使用插入同一文件会导致以下扭曲输出,其中“a”和“s”字母垂直拉长: VBA代码基本上是:Vba 将插入的EMF文件解组到Powerpoint时的失真,vba,powerpoint,.emf,Vba,Powerpoint,.emf,背景:我是一个Powerpoint插件的开发人员,该插件在Powerpoint中包含LaTeX显示。IguanaTex可以生成矢量图形显示(Powerpoint形状,通常为自由形式),方法是将EMF文件插入幻灯片中,将其解组,然后进行一些清理(删除额外形状、进一步解组、删除行等)。这些EMF文件通常是使用外部引擎()从LaTeX或用户希望转换为可编辑形状的PDF文件生成的(与LaTeX没有真正的关系,但整个代码库都提供了该功能,所以我将其放在了其中) 问题:我最近注意到以编程方式取消EMF文件分
公共子Emftoshape()
将线设置为布尔值
ConvertLines=False
选择暗选
设置Sel=Application.ActiveWindow.Selection
'获取当前幻灯片,它将用于分组范围
将sld变暗为幻灯片
尺寸滑块索引与长度相同
SlideIndex=ActiveWindow.View.Slide.SlideIndex
设置sld=ActivePresentation.Slides(SlideIndex)
将shp变暗为形状
设置shp=选择形状(1)
'将EMF图像转换为对象
模糊Shr作为定形符
设置Shr=shp.Ungroup
Set Shr=Shr.Ungroup
“清理
第(1)项。删除
Shr.项目(2).删除
像形状一样暗淡的新闻形状
如果Shr(3).GroupItems.count>2,则
设置新闻形状=Shr(3)
Else’只有一个自由形式,所以不是一个团体
Set newShape=Shr(3)。GroupItems(2)
如果结束
Shr(3).分组项目(1).删除
如果newShape.Type=msoGroup,则
Dim arr_组()作为变量
arr_group=GetAllShapeSingGroup(新形状)
调用FullyUngroupShape(新闻形状)
设置newShape=sld.Shapes.Range(arr\u group).group
Dim emf_arr()作为变量“收集所有形状以便稍后重新组合”
j_emf=0
Dim delete_arr()作为变量“收集所有要在以后删除的形状”
j_delete=0
像形状一样变暗
对于newShape.GroupItems中的每个s
j_emf=j_emf+1
ReDim保留emf_arr(1到j_emf)
如果s.类型=msoLine,则
如果转换线和(s.高度>0或s.宽度>0),则
emf_arr(j_emf)=LineToFreeform(s)。名称
j_delete=j_delete+1
重拨保留删除(1到j_删除)
delete_arr(j_delete)=s.name
其他的
emf_arr(j_emf)=s.name
如果结束
其他的
emf_arr(j_emf)=s.name
如果s.Fill.Visible=msoTrue,则
s、 Line.Visible=msoFalse
其他的
s、 Line.Visible=msoTrue
如果结束
如果结束
下一个
新闻形态解组
如果j_delete>0,则
sld.Shapes.Range(删除)。删除
如果结束
设置newShape=sld.Shapes.Range(emf\u arr.Group)
其他的
如果newShape.Type=msoLine,则
newShapeName=LineToFreeform(newShape).name
新闻形状.删除
设置newShape=sld.Shapes(newShapeName)
其他的
newShape.Line.Visible=msoFalse
如果结束
如果结束
newShape.LockAspectRatio=msoTrue
端接头
私有子完整组形状(新形状作为形状)
模糊Shr作为定形符
像形状一样变暗
如果newShape.Type=msoGroup,则
Set Shr=newShape.Ungroup
对于i=1到Shr.count
集合s=Shr.项目(i)