C# 使用OpenXml删除word中的水印&;腐败文件

C# 使用OpenXml删除word中的水印&;腐败文件,c#,openxml,C#,Openxml,我已尝试使用以下代码块从文档中删除水印 代码1: private static void DeleteCustomWatermark(WordprocessingDocument package, string watermarkId) { MainDocumentPart maindoc = package.MainDocumentPart; if(maindoc!=null) { var headers = maindoc.GetParts

我已尝试使用以下代码块从文档中删除水印

代码1:

private static void DeleteCustomWatermark(WordprocessingDocument package, string watermarkId)
{
    MainDocumentPart maindoc = package.MainDocumentPart;
    if(maindoc!=null)
        {
          var headers = maindoc.GetPartsOfType<HeaderPart>();
          if(headers!=null)
          {
              var head = headers.First(); //we are sure that this header part contains the Watermark with id=watermarkId
              var watermark = head.GetPartById(watermarkId);
              if(watermark!=null)
                  head.DeletePart(watermark);
          }
      }
  }
我已经尝试了这两个代码块。它会删除水印,但会使文档损坏。在这之后我需要恢复。恢复后,文档很好。但是我需要合适的解决方案,这样我就可以用C代码删除水印,而不会使文档损坏。请帮忙


谢谢

您还需要删除标题部分中的“图片”或“图纸”

e、 g

List pictures=新列表(headerPart.RootElement.subjections());
...
foreach(图片中的图片p){
p、 删除();
}
...
标题部分删除零件(图像零件列表);

“正确的解决方案,以便我可以从代码中嵌入水印”水印还是DEwatermark?是哪一个?我猜它加了水印是为了防止你一开始就想做的事?我只是在文档上加了水印,但经过一个特定的步骤后,我想删除那个水印。啊,那么,是你把水印放在了第一位?将水印作为您在文档上执行的最后一个操作是否更有意义?这是一个要求,最初我会在文档后面放置水印,最后,当它可以删除水印时…让我们举一个例子。。。打印工资单,除非得到会计部门的批准,否则我们将在上面贴上水印“内部文件”。在会计部门批准后,在分发给员工之前,我们将删除该水印。
   public static void DeleteCustomWatermark(WordProcessingDocument package, string headerId)
   {
     //headerId is the id of the header section which contains the watermark
     MainDocumentPart = maindoc = package.MainDocumentPart;
     if(maindoc!=null)
      {
         var header = maindoc.HeaderParts.First(i=>maindoc.GetIdOfPart(i).Equals(headerId));
         if(header!=null)
             maindoc.DeletePart(header)
      }
    }
List<Picture> pictures = new List<Picture>(headerPart.RootElement.Descendants<Picture>());

...

foreach(Picture p in pictures) {
     p.Remove();
}

...

headerPart.DeleteParts(imagePartList);