C#WordprocessingDocument-在单元格中插入图像

mur*_*ash 0 c# image openxml wordprocessingml

我有一种方法可以替换文档特定文本中的标签。如何更换标签图片? 在此处输入图片说明

小智 5

这是一段代码,用于查找表中文本为“ PersonMainPhoto”的单元格。表格单元被清除,并插入图像。希望这可以指导您正确的方向。

插入图像分为两个过程:

  • 将图像部分添加到文档
  • 在正文中插入对图像的引用-有关缩放,定位等的各种详细信息。

插入参考的代码来自出色的OpenXML SDK文档:https : //msdn.microsoft.com/zh-cn/library/office/bb497430.aspx

using System.IO;
using System.Linq;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using A = DocumentFormat.OpenXml.Drawing;
using DW = DocumentFormat.OpenXml.Drawing.Wordprocessing;
using PIC = DocumentFormat.OpenXml.Drawing.Pictures;

namespace StackOverflow
{
  class Program
  {
    static void Main(string[] args)
    {
      string file = @"c:\temp\mydoc.docx";
      string imageFile = @"c:\temp\myimage.jpg";
      string labelText = "PersonMainPhoto";

      using (var document = WordprocessingDocument.Open(file, isEditable: true))
      {
        var mainPart = document.MainDocumentPart;
        var table = mainPart.Document.Body.Descendants<Table>().First();

        var pictureCell = table.Descendants<TableCell>().First(c => c.InnerText == labelText);

        ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Jpeg);

        using (FileStream stream = new FileStream(imageFile, FileMode.Open))
        {
          imagePart.FeedData(stream);
        }

        pictureCell.RemoveAllChildren();
        AddImageToCell(pictureCell, mainPart.GetIdOfPart(imagePart));

        mainPart.Document.Save();
      }
    }

    private static void AddImageToCell(TableCell cell, string relationshipId)
    {
      var element =
        new Drawing(
          new DW.Inline(
            new DW.Extent() { Cx = 990000L, Cy = 792000L },
            new DW.EffectExtent()
            {
              LeftEdge = 0L,
              TopEdge = 0L,
              RightEdge = 0L,
              BottomEdge = 0L
            },
            new DW.DocProperties()
            {
              Id = (UInt32Value)1U,
              Name = "Picture 1"
            },
            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 = "New Bitmap Image.jpg"
                    },
                    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 = 990000L, Cy = 792000L }),
                      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
          });

      cell.Append(new Paragraph(new Run(element)));
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 杰出的?对于诸如“{ Cx = 990000L,Cy = 792000L }”之类的所有硬编码内容,任何想法都是“Name =“New Bitmap Image.jpg””?什么是 `Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}"`? (3认同)