C# 在Word文档模板中,按照占位符插入文字或图片

发布于:2024-11-27 ⋅ 阅读:(161) ⋅ 点赞:(0)

1,引入包:DocX

2,代码如下

  public class CC
  {

      public static void Ma22in()
      {
          // 示例:加载现有模板并替换占位符
          string templatePath = "报告模板.docx";  // 模板文件路径
          string outputPath = "Output.docx";      // 输出文件路径

          // 创建键值对,用于替换占位符
          var replacements = new Dictionary<string, string>()
          {
              ["{{name}}"] = "ExamineeModel.Name",
              ["{{hospitalName}}"] = "yyyy",
              ["{{age}}"] = "11",
              ["{{sex}}"] = "sex",
              ["{{date}}"] = $"{DateTime.Now:yyyy-MM-dd}",
              ["{{datetime}}"] = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}",
              ["{{department}}"] = "devartName",
              ["{{checkDescription}}"] = "CheckDescription",
              ["{{conclusionAndAnalysis}}"] = "ConclusionAnalysis",
              ["{{doctorName}}"] = "DocterName",
          };

          // 创建图片集合,存储图片路径及对应的占位符
          var imagePaths = new Dictionary<string, List<string>>
  {
      { "{{image}}", new List<string>()
      {
          @"123222.jpg",
          @"123123.jpg",
          @"123123.jpg",
          @"123123.jpg",
      } } // 填写图片路径
  };

          ReplacePlaceholdersInTemplate(templatePath, outputPath, replacements, imagePaths);
      }

      public static void ReplacePlaceholdersInTemplate(string templatePath, string outputPath,
                                  Dictionary<string, string> replacements, Dictionary<string, List<string>> imagePaths)
      {
          using (DocX document = DocX.Load(templatePath))
          {

              // 替换文本占位符
              foreach (var replacement in replacements)
              {
                  foreach (Paragraph paragraph in document.Paragraphs)
                  {
                      if (paragraph.Text.Contains(replacement.Key))
                      {
                          paragraph.ReplaceText(replacement.Key, replacement.Value);
                      }
                  }
              }

              #region 眉头

              // 替换页眉中的文本占位符
              if (document.Headers.Even != null)
              {
                  foreach (Paragraph paragraph in document.Headers.Even.Paragraphs)
                  {
                      foreach (var replacement in replacements)
                      {
                          if (paragraph.Text.Contains(replacement.Key))
                          {
                              paragraph.ReplaceText(replacement.Key, replacement.Value);
                          }
                      }
                  }
              }

              if (document.Headers.First != null)
              {
                  foreach (Paragraph paragraph in document.Headers.First.Paragraphs)
                  {
                      foreach (var replacement in replacements)
                      {
                          if (paragraph.Text.Contains(replacement.Key))
                          {
                              paragraph.ReplaceText(replacement.Key, replacement.Value);
                          }
                      }
                  }
              }

              if (document.Headers.Odd != null)
              {

                  foreach (Paragraph paragraph in document.Headers.Odd.Paragraphs)
                  {
                      foreach (var replacement in replacements)
                      {
                          if (paragraph.Text.Contains(replacement.Key))
                          {
                              paragraph.ReplaceText(replacement.Key, replacement.Value);
                          }
                      }
                  }

              }
              #endregion

              // 替换图片占位符
              foreach (var imagePath in imagePaths)
              {
                  foreach (Paragraph paragraph in document.Paragraphs)
                  {
                      if (paragraph.Text.Contains(imagePath.Key))
                      {
                          InsertImage(paragraph, document, imagePath.Value);
                          paragraph.ReplaceText(imagePath.Key, "");
                      }
                  }
              }


              // 保存输出文档
              document.SaveAs(outputPath);
          }
      }

      public static void InsertImage(Paragraph paragraph, DocX document, List<string> imagePath2, float width = 150, float height = 200f)
      {
          foreach (var imagePath in imagePath2)
          {
              if (System.IO.File.Exists(imagePath))
              {
                  // 添加图片到文档
                  var image = document.AddImage(imagePath);
                  var picture = image.CreatePicture();

                  // 设置图片大小
                  //picture.SetSize(width, height);
                  picture.Width = width;
                  picture.Height = height;
                  // 在对应段落插入图片
                  paragraph.InsertPicture(picture);
                
              }
              else
              {

              }
          }
      }

  }

3,模板例如:
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到