【问题标题】:Removing watermark in word with OpenXml & C# corrupts document使用 OpenXml 和 C# 删除 word 中的水印会损坏文档
【发布时间】:2018-03-08 07:22:22
【问题描述】:

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

代码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);
          }
      }
  }

代码2:

   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)
      }
    }

我已经尝试了这两个代码块。它会删除水印,但会使文档损坏。我需要在这之后恢复。恢复后文档很好。但我想要适当的解决方案,以便我可以使用 C# 代码删除水印,而不会损坏文档。请帮忙。

谢谢

【问题讨论】:

  • “适当的解决方案,以便我可以从代码中添加水印” 水印或去水印?它是哪一个?我猜它已经被加了水印,以防止您首先尝试做什么?
  • 我只为文档添加了水印,但经过特定步骤后,我想删除该水印。
  • 啊,原来是放水印的?将水印作为您对文档执行的最后一个操作是否更有意义?
  • 最初是一个要求,我会在最后的时候加上水印,而不是删除水印......
  • 举个例子... 打印工资单除非得到会计部门的批准,否则我们会加水印,上面写着“内部文件”。在分配给员工之前,在会计部门批准后,我们​​将删除该水印。

标签: c# openxml


【解决方案1】:

您还需要删除页眉部分中的“图片”或“绘图”。

例如

List<Picture> pictures = new List<Picture>(headerPart.RootElement.Descendants<Picture>());

...

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

...

headerPart.DeleteParts(imagePartList);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多