使用 MigraDoc 生成 DOC 或 DOCX

Generating a DOC or DOCX using MigraDoc

我正在处理一个需要创建 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 文件?如果是这样,我怎样才能做到这一点?

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

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

更新(2019-07-29):网站提到"Word",但这只是指RTF。从来没有 .DOC 或 .DOCX 的实现。

您可以使用 Microsoft 的 DocumentFormat.OpenXML 库,它有一个 NuGet 包。

似乎没有任何 MigraDoc 呈现器支持 DOCDOCX 格式。

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

Supports different output formats (PDF, Word, HTML, any printer supported by Windows)

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

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

完整的代码示例在这里:

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