使用C#将.doc转换为.docx

5

我使用PDFFocus.net dll将PDF文件转换为Word文件。但对于我的系统,我需要.docx文件。我尝试了不同的方法。有一些库可用,但这些都不是免费的。这是我的pdf到doc转换代码。

    Using System;
    Using System.Collections.Generic;
    Using System.Linq;
    Using System.Text;
    Using System.Threading.Tasks;
    Using iTextSharp.text;
    Using iTextSharp.text.pdf;

    namespace ConsoleApplication
    {
          class Program
          {
               static void main(String[] args)
               {
                    SautinSoft.PdfFocus f=new SautinSoft.PdfFocus();
                    f.OpenPdf(@"E:\input.pdf");

                         t.ToWord(@"E:\input.doc");
                }
          }
    }

这个工作顺利完成。然后我尝试使用以下代码将.doc转换为.docx。但是它给了我一个错误。

//Open a Document.
Document doc=new Document("input.doc");
//Save Document.
doc.save("output.docx");

请问有人能帮我吗?


1
类似于Gembox.DocumentSpireDoc.NET Free这样的库可能有所帮助 - 可以加载.doc文件并保存为.docx文件。 - marc_s
根据对文档的快速查看,没有迹象表明PDFFocus支持除RTF输出之外的任何内容(即使使用“.doc”文件扩展名)。您确定它可以生成基于Open XML的Word格式(“.docx”)吗? - Richard
2个回答

9

像Erop所说的那样,您可以使用Microsoft Word 14.0 Object Library。然后将doc转换为docx就非常容易了。例如,使用以下函数:

    public void ConvertDocToDocx(string path)
    {
        Application word = new Application();

        if (path.ToLower().EndsWith(".doc"))
        {
            var sourceFile = new FileInfo(path);
            var document = word.Documents.Open(sourceFile.FullName);

            string newFileName = sourceFile.FullName.Replace(".doc", ".docx");
            document.SaveAs2(newFileName,WdSaveFormat.wdFormatXMLDocument, 
                             CompatibilityMode: WdCompatibilityMode.wdWord2010);

            word.ActiveDocument.Close();
            word.Quit();

            File.Delete(path);
        }
    }

请确保添加CompatibilityMode: WdCompatibilityMode.wdWord2010,否则文件将保持兼容模式。还要确保在想要运行应用程序的机器上安装了Microsoft Office。

另一件事,我不了解PDFFocus.net,但您是否尝试过直接从pdf转换为docx。像这样:

     static void main(String[] args)
     {
           SautinSoft.PdfFocus f=new SautinSoft.PdfFocus();
           f.OpenPdf(@"E:\input.pdf");

                t.ToWord(@"E:\input.docx");
     }

我认为这个应该是在工作中的,但这只是猜测。

非常感谢你,Dave。这对我很有帮助。我尝试了使用.docx格式的PDFFocus.net,但是PDFFocus.net只支持.Doc文件。无论如何,非常感谢你的回答。 - Lasa
请注意,有两个Word InterOp程序集。我已经在控制台应用程序中成功地使用v15.0测试了第一个代码块。即使确保了CompatibilityMode行,文档仍以兼容模式打开,但我认为这并不重要。需要注意的是,它不应该从“服务器”代码尝试,包括从网站或本地Windows服务运行,因为它在与登录用户不同的用户上下文中运行,会出现CO_E_SERVER_EXEC_FAILURE (0x80080005): Server execution failed错误。https://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office - vapcguy
顺便说一句,如果你尝试了这个并且遇到了错误,我发现这个链接可以解决错误:https://dev59.com/e3A75IYBdhLWcg3wGU-I - vapcguy

1

尝试使用Microsoft.Office.Interop.Word程序集。

可以在MSDN文章这里找到。

在您的项目中包含引用,并通过上述链接中的示例启用它们在代码模块中的使用。

using System.Collections.Generic;
using Word = Microsoft.Office.Interop.Word;

1
感谢您回答这个问题!不过,这个答案很简短,缺乏足够的上下文信息。请解释一些背后的原因,这样它将对提问者和未来的读者更有用。谢谢! - Maximillian Laumeister
我稍微调整了一下。欢迎来到Stack。 - Drew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接