PowerPoint openxml - 向文本框添加大纲

时间:2015-02-07 03:00:33

标签: asp.net vb.net visual-studio openxml

(更新:自我解答,见下文)

使用VS2013 Premium,asp.net。 vb.net,网站,win7
使用OpenXML SDK和OpenXML生产力工具

我有一个类对象的字典,它按位置和文本内容描述图形形状(矩形,箭头,文本框)。我使用类对象在空白PowerPoint演示文稿中创建形状。形状以正确的文本显示在正确的位置。但是,我无法弄清楚如何更改一些样式,从文本框大纲样式“solid& dark”或“none”开始。

整体机制:

  • 以PowerPoint 2013文档开头,其中一张幻灯片具有一个形状
  • 使用Productivity Tool将PPTX反映到C#,将其转换为VB.Net,将其放入我的项目中的类(再次,网站)
  • 找到代码中将形状添加到幻灯片形状树的位置
  • 使用对导入字典的类的函数调用替换该代码,将字典的类对象转换为openxml形状,并将形状添加到形状树。

一切正常。

然而,一些形状是需要轮廓的图形矩形,而其他形状则是不需要的文本框。同样,我无法弄清楚如何修改文本框上的轮廓。

这是一个测试设置,说明了问题(尽管作为一个openxml newb,我可能会遗漏一些非常大的明显部分)。

起点:使用没有轮廓的文本框创建PPTX;复制它;在PPTX副本中添加一个大纲到文本框,看看PowerPoint,并看到下面的比较: Comparison of two input powerpoints slides, one with shape with outline, one with shape without outline
比较OpenXML Productivity Tool中的两个文档,查看XML中的差异,并反映相应的代码:

Comparison of XML and reflected code of change 使用生产力工具中没有轮廓的文本框打开PPTX,并反映生成整个PPTX所需的完整代码。将该代码放在新网站项目的类中。创建一个将在页面加载时执行该代码的webform。

找到文本框添加到shapetree的位置,以及为形状创建shapeproperties的位置。添加应该将轮廓添加到文本框的差异代码,以便将轮廓添加到shapeproperties:

Snapshot showing the differential code added to the Generated code above

使用活动和非活动代码运行它(使用If语句)并查看生成的PPTX:

带有没有大纲的文本框的PPTX:

Generated PPTX without outline on textbox

PPTX带文字框的轮廓(注意:根本没有形状)

Generated PPTX with outline on textbox

然后打开并比较生产力工具中的新输出PPTX:
(左边是“无轮廓”,右边是“有轮廓”)

Comparison of new outputs

输出文档的比较XML看起来与在起始输入文档的比较中看起来相同,但是,应该具有带轮廓的形状的输出PPT没有显示任何内容。奇怪的是,XML显示形状在PPTX中,但它不会在PowerPoint客户端中显示。

任何有助于理解如何将轮廓添加到某些文本框,箭头和矩形而不是其他文本框的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

答案来自不同的角度。 ShapeProperties对象的另一个元素是PresetGeometry,它具有ShapeTypeValue

Dim presetGeometry1 As A.PresetGeometry = Nothing
presetGeometry1 = New A.PresetGeometry() With { _
                        .Preset = A.ShapeTypeValues.Rectangle} 
shapeProperties1.Append(presetGeometry1)

在进行实验时,我发现文本框不需要任何预设几何体。

我重写了代码,不为文本框添加PresetGeometry,然后将适用的主题样式设置为“黑暗,实心”轮廓而不是“无轮廓”。矩形根据主题显示轮廓,文本框显示在应该的位置,没有轮廓。