gpt4 book ai didi

c# - 如何将图像插入到 OpenXML Word 文档的页眉中?

转载 作者:太空狗 更新时间:2023-10-29 20:17:17 24 4
gpt4 key购买 nike

我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com