在我的开发PC以外的机器上,Word到PDF转换失败

时间:2013-08-05 14:04:35

标签: c# winforms pdf ms-word

我正在测试从Winforms应用程序以编程方式将Word文档转换为PDF。 我写了下面的代码,在我的机器上工作正常。 该应用程序包含一个带有2个按钮和一个文本框的表单。 单击第一个按钮将打开一个对话框,允许用户导航到文件夹。 文件夹地址存储在文本框中。 然后第二个按钮从指定的文件夹中获取每个Word文档,并为每个文档创建一个具有相同名称的PDF。

namespace PDFTesting
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnFind_Click(object sender, EventArgs e)
        {
            try
            {
                FolderBrowserDialog folder = new FolderBrowserDialog();
                DialogResult result = folder.ShowDialog();
                if (result == DialogResult.OK)
                {
                    string[] files = Directory.GetFiles(folder.SelectedPath);
                    txtLocation.Text = folder.SelectedPath.ToString();
                }
                else
                {
                    txtLocation.Text = null;
                }
            }
            catch (Exception eX)
            {
                throw new Exception("cDocument: Error atempting to GetPath()" + Environment.NewLine + eX.Message);
            }
        }

        private void btnConvert_Click(object sender, EventArgs e)
        {
            // Create a new Microsoft Word application object
            Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();

            // C# doesn't have optional arguments so we'll need a dummy value
            object oMissing = System.Reflection.Missing.Value;

            // Get list of Word files in specified directory
            string docPath = txtLocation.Text;
            DirectoryInfo dirInfo = new DirectoryInfo(docPath);
            FileInfo[] wordFiles = dirInfo.GetFiles("*.doc");

            word.Visible = false;
            word.ScreenUpdating = false;

            foreach (FileInfo wordFile in wordFiles)
            {
                // Cast as Object for word Open method
                Object filename = (Object)wordFile.FullName;

                // Use the dummy value as a placeholder for optional arguments
                Document 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 = wordFile.FullName.Replace(".docx", ".pdf");
                object fileFormat = WdSaveFormat.wdFormatPDF;

                // Save document into PDF Format
                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);

                // Close the Word document, but leave the Word application open.
                // doc has to be cast to type _Document so that it will find the
                // correct Close method.                
                object saveChanges = WdSaveOptions.wdDoNotSaveChanges;
                ((_Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing);
                doc = null;
            }

            // word has to be cast to type _Application so that it will find
            // the correct Quit method.
            ((_Application)word).Quit(ref oMissing, ref oMissing, ref oMissing);
            word = null;
        }
    }
}

这与我的开发PC完全一样,但是当我构建解决方案并分发到另一台机器(运行相同版本的Windows 7,64位)并安装了Word时,我收到以下错误 -

Error

有没有人知道为什么我的迷你PDF应用程序无法在替代机器上运行?

2 个答案:

答案 0 :(得分:1)

如果安装完整版Office是一个问题,您仍然可以使用开放式办公室执行转换。看看以下文章:

How to convert office documents to PDF using open office

答案 1 :(得分:1)

我安装了Office 365免费月试用版,并使用它创建了一个Word文档。 然后我将我的应用程序指向它的文件夹,并成功将文档转换为PDF。 感谢danielu让我尝试了另一个版本的Word。

再次看一下,我现在注意到Office的初始版本保存了扩展名为.doc的文档,而不是我的Word版本,它以.docx扩展名保存它。因此,我认为问题是以下代码行没有正确替换扩展名 -

object outputFileName = wordFile.FullName.Replace(".docx", ".pdf");

一切正常,谢谢。