- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的 OpenXML Word 文档生成项目需要文本、表格和图像。但首先,我需要一个带有 Logo (图像)的文档页眉。
我使用 Microsoft 示例创建页眉和页脚 Generating Documents with Headers and Footers in Word 2007 by Using the Open XML SDK 2.0 for Microsoft Office和文本标题工作正常,但图像显示在标题中,图像图标损坏,尺寸正确的边框,以及消息“当前无法显示此图像”。此外,我可以将所选图像加载到文档正文中。以下是我创建 ImagePart 的方式:
// Create AG logo part.
_agLogoPart = mainDocumentPart.AddImagePart(ImagePartType.Jpeg);
using (FileStream stream = new FileStream(_agLogoFilename, FileMode.Open))
{
_agLogoPart.FeedData(stream);
}
_agLogoRel = mainDocumentPart.GetIdOfPart(_agLogoPart);
图像是使用从 Microsoft 示例派生的 LoadImage 方法加载的,但添加了宽度和高度参数,并返回一个 Drawing 对象:
private static Drawing LoadImage(string relationshipId,
string filename,
string picturename,
double inWidth,
double inHeight)
{
double emuWidth = Konsts.EmusPerInch * inWidth;
double emuHeight = Konsts.EmusPerInch * inHeight;
var element = new Drawing(
new DW.Inline(
new DW.Extent { Cx = (Int64Value)emuWidth, Cy = (Int64Value)emuHeight },
new DW.EffectExtent { LeftEdge = 0L, TopEdge = 0L, RightEdge = 0L, BottomEdge = 0L },
new DW.DocProperties { Id = (UInt32Value)1U, Name = picturename },
new DW.NonVisualGraphicFrameDrawingProperties(
new A.GraphicFrameLocks { NoChangeAspect = true }),
new A.Graphic(
new A.GraphicData(
new PIC.Picture(
new PIC.NonVisualPictureProperties(
new PIC.NonVisualDrawingProperties { Id = (UInt32Value)0U, Name = filename },
new PIC.NonVisualPictureDrawingProperties()),
new PIC.BlipFill(
new A.Blip(
new A.BlipExtensionList(
new A.BlipExtension { Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}" }))
{
Embed = relationshipId,
CompressionState = A.BlipCompressionValues.Print },
new A.Stretch(
new A.FillRectangle())),
new PIC.ShapeProperties(
new A.Transform2D(
new A.Offset { X = 0L, Y = 0L },
new A.Extents { Cx = (Int64Value)emuWidth, Cy = (Int64Value)emuHeight }),
new A.PresetGeometry(
new A.AdjustValueList()) { Preset = A.ShapeTypeValues.Rectangle })))
{
Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture"
}))
{
DistanceFromTop = (UInt32Value)0U,
DistanceFromBottom = (UInt32Value)0U,
DistanceFromLeft = (UInt32Value)0U,
DistanceFromRight = (UInt32Value)0U,
EditId = "50D07946"
});
return element;
}
使用它,下面的代码可以工作,将图像加载到我想要的 body 的任何地方:
Paragraph paraImage = new Paragraph(new Run(LoadImage(_genomeImageRel, _genomeImageFilename, "name" + _genomeImageRel, 7.5, 2.925)));
body.AppendChild(paraImage);
并且以下代码无法在页眉中放置 Logo 图像:
private static Header GeneratePageHeaderPart(string headerText)
{
Header hdr = new Header(new Paragraph(new Run(LoadImage(_agLogoRel, _agLogoFilename, "name" + _agLogoRel, 2.57, 0.73))));
return hdr;
}
我怀疑我做错了一些非常微妙的事情,因为我可以在页眉以外的任何地方加载图像。任何人都可以建议吗?
最佳答案
I suspect I'm doing something very subtle incorrectly, because I can load the image anywhere but in the header.
如果您能够在主文档中插入图像,您还可以使用此代码 (private static Drawing LoadImage
) 在页眉或页脚中插入图像。
唯一的区别是添加ImagePart
的位置:
要在文档的body 中插入图像,您可以将ImagePart
添加到MainDocumentPart
:
_agLogoPart = mainDocumentPart.AddImagePart(ImagePartType.Jpeg);
...
_agLogoRel = mainDocumentPart.GetIdOfPart(_agLogoPart);
要在header 中插入图像,您需要将ImagePart
添加到用于创建header 的HeaderPart
_agLogoPart = headerPart.AddImagePart(ImagePartType.Jpeg);
...
_agLogoRel = headerPart.GetIdOfPart(_agLogoPart);
要在页脚 中插入图像,您需要将ImagePart
添加到用于创建页脚的FooterPart
:
_agLogoPart = footerPart.AddImagePart(ImagePartType.Jpeg);
...
_agLogoRel = footerPart.GetIdOfPart(_agLogoPart);
相关:
关于c# - 如何将图像插入到 OpenXML Word 文档的页眉中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17726196/
我是一名优秀的程序员,十分优秀!