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 アプリが別のマシンで動作しない理由を知っている人はいますか?