C#。 Doc to PDF转换

时间:2014-10-08 13:46:23

标签: c# asp.net pdf-generation

我正在尝试使用visual studio 2013将doc或docx文件转换为PDF.C#语言。 我试图调试,我认为我的代码的以下部分有问题:

public static void Main(string[] args)
    {
        if (args.Count() > 1)
        {
            translate.ConvertAllWordFilesToPdf(args[0], args[1]);
        }

    }

我没有收到任何错误。我得到这个输出消息: 程序'[9240] Conversion.vshost.exe'已退出,代码为0(0x0)。

感谢您的帮助。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.IO;
using System.Text;
using Microsoft.Office.Interop.Word;

namespace Conversion
{
public static class Program
{
    public static void Main(string[] args)
    {
        if (args.Count() > 1)
        {
            translate.ConvertAllWordFilesToPdf(args[0], args[1]);
        }

    }

    public class translate
    {

        public static void ConvertAllWordFilesToPdf(string WordFilesLocation, string PdfFilesLocation)
        {
            Document doc = null;


            object oMissing = System.Reflection.Missing.Value;
            Microsoft.Office.Interop.Word.Application word = null;

            try
            {

                word = new Microsoft.Office.Interop.Word.Application();


                DirectoryInfo dirInfo = new DirectoryInfo(WordFilesLocation);

                FileInfo[] wordFiles = dirInfo.GetFiles("*.doc");

                if (wordFiles.Length > 0)
                {
                    word.Visible = false;
                    word.ScreenUpdating = false;
                    string sourceFile = "";
                    string destinationFile = "";
                    try
                    {
                        foreach (FileInfo wordFile in wordFiles)
                        {

                            Object filename = (Object)wordFile.FullName;

                            sourceFile = wordFile.Name;
                            destinationFile = "";


                            doc = word.Documents.Open(ref filename, ref oMissing,
                                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                            doc.Activate();
                            object outputFileName = null;

                            if (wordFile.FullName.ToUpper().Contains(".DOCX"))
                            {
                                outputFileName = wordFile.FullName.Replace(".docx", ".pdf");
                                destinationFile = sourceFile.Replace(".docx", ".pdf");

                            }
                            else
                            {
                                outputFileName = wordFile.FullName.Replace(".doc", ".pdf");
                                destinationFile = sourceFile.Replace(".doc", ".pdf");
                            }

                            sourceFile = WordFilesLocation + @"C:\Source" + destinationFile;
                            destinationFile = PdfFilesLocation + @"C:\Destination" + destinationFile;

                            object fileFormat = WdSaveFormat.wdFormatPDF;


                            doc.SaveAs(ref outputFileName,
                                ref fileFormat, ref oMissing, ref oMissing,
                                ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                ref oMissing, ref oMissing, ref oMissing, ref oMissing);


                            object saveChanges = WdSaveOptions.wdDoNotSaveChanges;
                            ((_Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing);
                            doc = null;


                            if (System.IO.File.Exists(destinationFile))
                            {
                                System.IO.File.Replace(sourceFile, destinationFile, null);
                            }
                            else
                            {
                                System.IO.File.Move(sourceFile, destinationFile);
                            }

                            Console.WriteLine("Success:" + "SourceFile-" + outputFileName.ToString() + " DestinationFile-" + destinationFile);

                        }


                        ((_Application)word).Quit(ref oMissing, ref oMissing, ref oMissing);
                        word = null;
                    }
                    catch (Exception ex)
                    {

                        Console.WriteLine("Fail:" + "SourceFile-" + sourceFile + "  DestinationFile-" + destinationFile + "#Error-" + ex.Message);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error occured while processing");
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (doc != null)
                {
                    ((_Document)doc).Close(ref oMissing, ref oMissing, ref oMissing);
                    doc = null;

                }
                if (word != null)
                {
                    ((_Application)word).Quit(ref oMissing, ref oMissing, ref oMissing);
                    word = null;
                }
            }
        }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

我注意到一段非常有趣的代码:

sourceFile = WordFilesLocation + @"C:\Source" + destinationFile;
destinationFile = PdfFilesLocation + @"C:\Destination" + destinationFile;

尝试删除@"C:\Source"。 我删除了它,代码在我的计算机上运行。

另外,我不确定是否应该为某些位置字符串添加@"\"(不以" \"结尾)。小心。