如何在.net中的word文档中添加带有图像的页脚

时间:2011-10-14 13:26:30

标签: c# .net openxml

我正在尝试使用页眉创建一个word文件,页脚和页脚必须有一个Image可以帮助我做任何人。

我使用Open XML创建word文件。

1 个答案:

答案 0 :(得分:0)

你可以试试这个。您需要创建DocumentResource(Item-> Add new)并关联图像。

 private static Footer BuildFooter(FooterPart hp, string title)
        {                   
            ImagePart ip = hp.AddImagePart(ImagePartType.Jpeg);
            string imageRelationshipID = hp.GetIdOfPart(ip);

            using (Stream imgStream = ip.GetStream())
            {
                System.Drawing.Bitmap logo = DocumentResources._default;
                logo.Save(imgStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            }

            Footer h = new Footer();
            DocumentFormat.OpenXml.Wordprocessing.Paragraph p = new DocumentFormat.OpenXml.Wordprocessing.Paragraph();
            Run r = new Run();
            Drawing drawing = BuildImage(imageRelationshipID, "_default.jpg", 200, 30);
            r.Append(drawing);
            p.Append(r);
            r = new Run();
            RunProperties rPr = new RunProperties();
            TabChar tab = new TabChar();            
            Bold b = new Bold();
            Color color = new Color { Val = "000000" };
            DocumentFormat.OpenXml.Wordprocessing.FontSize sz = new DocumentFormat.OpenXml.Wordprocessing.FontSize {Val = Convert.ToString("40")};
            Text t = new Text { Text = title };
            rPr.Append(b);
            rPr.Append(color);
            rPr.Append(sz);
            r.Append(rPr);
            r.Append(tab);
            r.Append(t);
            p.Append(r);
            h.Append(p);
            return h;
        }

并构建图像

 private static Drawing BuildImage(string imageRelationshipID, string imageName, int pixelWidth, int pixelHeight)
        {
            int emuWidth = (int)(pixelWidth * EMU_PER_PIXEL);
            int emuHeight = (int)(pixelHeight * EMU_PER_PIXEL);
            Drawing drawing = new Drawing();
            d.Wordprocessing.Inline inline = new d.Wordprocessing.Inline { DistanceFromTop = 0, DistanceFromBottom = 0, DistanceFromLeft = 0, DistanceFromRight = 0 };
            d.Wordprocessing.Anchor anchor = new d.Wordprocessing.Anchor();
            d.Wordprocessing.SimplePosition simplePos = new d.Wordprocessing.SimplePosition { X = 0, Y = 0 };
            d.Wordprocessing.Extent extent = new d.Wordprocessing.Extent { Cx = emuWidth, Cy = emuHeight };
            d.Wordprocessing.DocProperties docPr = new d.Wordprocessing.DocProperties { Id = 1, Name = imageName };
            d.Graphic graphic = new d.Graphic();            
            d.GraphicData graphicData = new d.GraphicData { Uri = GRAPHIC_DATA_URI };
            d.Pictures.Picture pic = new d.Pictures.Picture();
            d.Pictures.NonVisualPictureProperties nvPicPr = new d.Pictures.NonVisualPictureProperties();
            d.Pictures.NonVisualDrawingProperties cNvPr = new d.Pictures.NonVisualDrawingProperties { Id = 2, Name = imageName };
            d.Pictures.NonVisualPictureDrawingProperties cNvPicPr = new d.Pictures.NonVisualPictureDrawingProperties();
            d.Pictures.BlipFill blipFill = new d.Pictures.BlipFill();
            d.Blip blip = new d.Blip { Embed = imageRelationshipID };
            d.Stretch stretch = new d.Stretch();
            d.FillRectangle fillRect = new d.FillRectangle();
            d.Pictures.ShapeProperties spPr = new d.Pictures.ShapeProperties();
            d.Transform2D xfrm = new d.Transform2D();
            d.Offset off = new d.Offset { X = 0, Y = 0 };
            d.Extents ext = new d.Extents { Cx = emuWidth, Cy = emuHeight };
            d.PresetGeometry prstGeom = new d.PresetGeometry { Preset = d.ShapeTypeValues.Rectangle };
            d.AdjustValueList avLst = new d.AdjustValueList();
            xfrm.Append(off);
            xfrm.Append(ext);
            prstGeom.Append(avLst);
            stretch.Append(fillRect);
            spPr.Append(xfrm);
            spPr.Append(prstGeom);
            blipFill.Append(blip);
            blipFill.Append(stretch);
            nvPicPr.Append(cNvPr);
            nvPicPr.Append(cNvPicPr);
            pic.Append(nvPicPr);
            pic.Append(blipFill);
            pic.Append(spPr);
            graphicData.Append(pic);
            graphic.Append(graphicData);
            inline.Append(extent);
            inline.Append(docPr);
            inline.Append(graphic);
            drawing.Append(inline);
            return drawing;
        }

在构建文档的函数中调用这些函数

     FooterPart hp = mp.AddNewPart<FooterPart>();
        string headerRelationshipID = mp.GetIdOfPart(hp);
        SectionProperties sectPr = new SectionProperties();
        FooterReference footerReference = new FooterReference();
        FooterReference.Id = footerRelationshipID;
        FooterReference.Type = HeaderFooterValues.Default;
        sectPr.Append(footerReference);
        b.Append(sectPr);
        d.Append(b);   
        hp.Footer = BuildFooter(hp, "My Test");