【问题标题】:Generating a DOC or DOCX using MigraDoc使用 MigraDoc 生成 DOC 或 DOCX
【发布时间】:2015-06-16 05:39:19
【问题描述】:

我正在做一个需要创建 Word 文件的项目。为此,我正在使用适用于 C# 的 MigraDoc 库。

使用这个库,我可以很容易地通过编写生成一个 RTF 文件:

Document document = CreateDocument();
RtfDocumentRenderer rtf = new RtfDocumentRenderer();
rtf.Render(document, "test.rtf", null);
Process.Start("test.rtf");

但现在要求我获取 DOC 或 DOCX 文件而不是 RTF 文件。有没有办法使用 MigraDoc 生成 DOC 或 DOCX 文件?如果是这样,我怎样才能做到这一点?

【问题讨论】:

    标签: c# pdfsharp migradoc


    【解决方案1】:

    MigraDoc 无法生成 DOC 或 DOCX 文件。由于 MigraDoc 是开源的,如果您有知识和时间,您可以为 DOCX 添加一个渲染器。

    MigraDoc 本身无法生成 DOC/DOCX,但也许您可以在生成 RTF 文件后调用外部转换工具。
    我不知道任何这样的工具。 Word 可以快速打开 RTF,到目前为止,我们的客户从未抱怨获得 RTF,而不是 DOC 或 DOCX。

    更新(2019-07-29):网站提到“Word”,但这仅指 RTF。 .DOC 或 .DOCX 从来没有实现过。

    【讨论】:

      【解决方案2】:

      似乎没有任何支持 DOCDOCX 格式的 MigraDoc 渲染。

      在文档页面上,我们可以看到一个 MigraDoc 功能:

      支持不同的输出格式(PDF、Word、HTML、Windows 支持的任何打印机)

      但似乎文档中提到了与 Word 完美配合的 RTF 格式。我查看了MigraDoc repository,但没有看到任何 DOC 渲染。我们只能使用 RTF 转换器来支持 Word。所以我们不能直接使用这个包生成DOC文件。

      但我们可以使用FreeSpire.Doc nuget 包轻松(免费)将 RTF 转换为 DOCDOCX

      完整的代码示例在这里:

      using MigraDoc.DocumentObjectModel;
      using MigraDoc.RtfRendering;
      using Spire.Doc;
      using System.IO;
      
      namespace MigraDocTest
      {
          class Program
          {
              static void Main(string[] args)
              {
                  using (var stream = new MemoryStream())
                  {
                      // Generate RTF (using MigraDoc)
                      var migraDoc = new MigraDoc.DocumentObjectModel.Document();
                      var section = migraDoc.AddSection();
                      var paragraph = section.AddParagraph();
                      paragraph.AddFormattedText("Hello World!", TextFormat.Bold);
                      var rtfDocumentRenderer = new RtfDocumentRenderer();
                      rtfDocumentRenderer.Render(migraDoc, stream, false, null);
      
                      // Convert RTF to DOCX (using Spire.Doc)
                      var spireDoc = new Spire.Doc.Document();
                      spireDoc.LoadFromStream(stream, FileFormat.Auto);
                      spireDoc.SaveToFile("D:\\example.docx", FileFormat.Docx );
                  }
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        你可以使用微软的 Do​​cumentFormat.OpenXML 库,它有一个 NuGet 包。

        【讨论】:

        • 你有例子吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-01
        • 1970-01-01
        相关资源
        最近更新 更多