我(OpenXML Newbie)需要扩展一个扩展自己模板的程序。有一个人名和描述的表。描述应该从另一个文件中获得。这部分适用于未格式化的文本。
现在,客户希望在说明部分中使用格式化文本和图片。 格式化工作,但我无法使图像部分工作。 Word 2007无法再打开文档。
我认为关系出错了。我在XML中发现了两个部分:
/word/media/image1.bin
现在在生成的文档中,图片位于/media/image.bin
中。这会导致问题吗?在/word/_rels/document.xml
中,路径指向正确的资源:Target="/media/image.bin"
<a:pic>, <a:nvPicPr>, ...
而不是<pic:pic>, <pic:ncvPicPr>, ...
你可以帮我解决这个问题,还是指点一下教程资源?因为文档的大部分已经存在,所以我在实现它的方式上受到限制(例如,我必须返回一个TableCell)。
我刚刚手动编辑了生成的document.xml:我将<a:...>
替换为<pic:...>
,现在它似乎正常工作。所以问题是如何正确生成<pic:...>
元素。
以下是关于这种关系的一些代码片段:
...
ImagePart myIP = mainPart.AddImagePart(iP.ContentType);
// mIPRelId is a string which ist later used (blip)
mIPRelId = mainPart.CreateRelationshipToPart(myIP);
// iP is the imagepart from the source doc...
myIP.FeedData(iP.GetStream());
// myDR is the local drawing
// generate Inline should generate the inline part
myDR.Inline = generateInline(myXMLDrawing, nsManager);
...
// later when generating the blip
if (myChild.Name == "a:blip")
{
DocumentFormat.OpenXml.Drawing.Blip myBlip = new Blip();
myBlip.Embed = mIPRelId;
...
myBlipFill.Append(myBlip);
}
以下是生成图片部分(名称空间概率)的片段:
...
DocumentFormat.OpenXml.Drawing.Picture myPic =
new DocumentFormat.OpenXml.Drawing.Picture();
string myNodes = ".//descendant::pic:nvPicPr | ";
myNodes += ".//descendant::pic:blipFill | ";
myNodes += ".//descendant::pic:spPr | ";
myNodes += ".//following::w:bookmarkEnd";
XmlNodeList followingNodesList = myXMLPic.
SelectNodes(myNodes, nsManager);
myPic.AddNamespaceDeclaration(
"pic",
"http://schemas.openxmlformats.org/drawingml/2006/picture");
// stepping through the descendants and adding them
// to the picture
foreach (XmlElement el in followingNodesList)
{
if (el.Name == "pic:nvPicPr")
{
DocumentFormat.OpenXml.Drawing.NonVisualPictureProperties myNVPP =
new NonVisualPictureProperties();
...
myPic.Append(myNVPP);
}
...
// Adding the other parts like blipfill....
以下是生成的XML片段(抱歉格式化):
...
<a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
<a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
<a:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
<a:nvPicPr>
<a:cNvPr id="0" name="MS_HUND.JPG" />
<a:cNvPicPr />
</a:nvPicPr>
<a:blipFill>
<a:blip r:embed="R65532bbe7935423e" cstate="print" />
<a:stretch>
<a:fillRect />
</a:stretch>
</a:blipFill>
<a:spPr>
<a:xfrm>
<a:off x="0" y="0" />
<a:ext cx="714375" cy="762000" />
</a:xfrm>
<a:prstGeom prst="rect">
<a:avLst />
</a:prstGeom>
</a:spPr>
</a:pic>
</a:graphicData>
</a:graphic>
...