1

WinformsアプリからWord文書をプログラムでPDFに変換することをテストしています。私のマシンで正常に動作する次のコードを書きました。このアプリは、2 つのボタンとテキスト ボックスを備えたフォームで構成されています。最初のボタンをクリックするとダイアログ ボックスが開き、ユーザーはフォルダに移動できます。フォルダのアドレスがテキスト ボックスに格納されます。次に、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 をインストールすると、次のエラーが発生します -

エラー

私のミニ PDF アプリが別のマシンで動作しない理由を知っている人はいますか?

4

2 に答える 2

1

Office 365 の 1 か月無料試用版をインストールして、Word 文書を作成しました。次に、アプリケーションをそのフォルダーに向けると、ドキュメントが PDF に正常に変換されました。別のバージョンの Word を試す機会を与えてくれて、danielu に感謝します。

これをもう一度見てみると、私のバージョンの Word では .docx 拡張子でドキュメントを保存するのではなく、スターター バージョンの Office ではドキュメントを .doc 拡張子で保存していることに気付きました。したがって、問題は、次のコード行が拡張子を正しく置き換えていなかったことだと思います-

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

すべてが正常に動作するようになりました。

于 2013-08-05T15:20:18.113 に答える