使用 MigraDoc 生成 DOC 或 DOCX

问题描述 投票:0回答:3

我正在做一个项目,我需要创建一个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# .net pdfsharp migradoc
3个回答
4
投票

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 支持的任何打印机)

但似乎文档说 RTF 格式与 Word 完美配合。我已经查看了 MigraDoc 存储库,但没有看到任何 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 );
            }
        }
    }
}

0
投票

您可以使用 Microsoft 的 DocumentFormat.OpenXML 库,该库具有 NuGet 包。

© www.soinside.com 2019 - 2024. All rights reserved.