使用 Interop.Word C# 将 doc 转换为 pdf
Converting doc to pdf using Interop.Word C#
我正在使用 C# 将 .doc 转换为 .pdf。 .doc 在供应商的网站上。要获取 .doc,我们必须单击一个按钮,该按钮会向我们提供 Open, Save, or Cancel
选项。当用户单击 Save
按钮时,它会提示输入位置。用户选择映射驱动器中的位置,例如 S:\Some Folder\abc.doc
,实际文件夹位置是 \server\folder\Some Folder
。这是我的程序发挥作用的地方。我在 c# 中使用 FileSystemWatcher
class 并为 .doc 文件设置了过滤器。我可以在调试中看到文件已找到。文件夹位置被硬编码并保存为上述实际文件夹位置。用户和应用程序对该文件夹具有完全权限。但是,当我 运行 程序时,我得到 FileNotFoundException
。
这就是我的
WriteToFile("Starting Word application");
Application word = new Application();
object missing = Type.Missing;
var sourcefile = new FileInfo(path);
// check if the created file ends with .doc.
System.Diagnostics.Debug.WriteLine(path);
if (!path.ToLower().EndsWith(".doc"))
{
return "";
}
word.Visible = false;
WriteToFile("Opening doc as read only");
// open readonly
System.Diagnostics.Debug.WriteLine(sourcefile.FullName);
var doc = word.Documents.Open(FileName: sourcefile.FullName, ReadOnly: true);
奇怪的是 sourcefile.FullName
没有显示 path
设置的硬编码服务器地址。它将文件路径显示为 S:\Some Folder\abc.doc
,这对我来说毫无意义。这是怎么回事,为什么找不到文件?
我的猜测是您使用了错误的 FileInfo 对象。尝试生成一个新的或使用
System.IO.Path.Combine(@"\server\folder\Some Folder", "sourcefile.Name")
您还可以使用它来生成新的 FileInfo 对象。您正在使用的对象可能是使用映射驱动器的用户对话框之一。您的位置也确实有错字。 \SERVERNAME\
不是 UNC 路径。字符串的开头应该只有两个反斜杠。应该是
@"\server\folder\Some Folder"
WriteToFile("Starting Word application");
Application word = new Word.Application();
object missing = Type.Missing;
var sourcefile = new System.IO.FileInfo(path);
string SomeShare = @"\SomeServer\Someshare\Somepath";
System.IO.FileInfo WorkFile = new System.IO.FileInfo(System.IO.Path.Combine(SomeShare, sourcefile.Name));
// check if the created file ends with .doc.
System.Diagnostics.Debug.WriteLine(path);
if (!path.ToLower().EndsWith(".doc"))
{
return "";
}
word.Visible = false;
WriteToFile("Opening doc as read only");
// open readonly
System.Diagnostics.Debug.WriteLine(sourcefile.FullName);
var doc = word.Documents.Open(FileName: WorkFile.FullName, ReadOnly: true);
}
这对我来说很好用,它更新了正确的 UNC 模式的路径。如果文件仍然不可访问,您应该检查是否可以使用您生成的 UNC 路径在工作站上打开它。
当底层文件仍处于 use/being 写入状态时,OnCreate
事件可能会触发,如果您立即尝试访问它可能会导致问题。
简单的解决方案是引入任意延迟以允许文件被创建它的进程关闭,或者更好的是一个具有短暂延迟的循环,该循环尝试访问该文件,如果它捕获相关异常发生并重试。
我正在使用 C# 将 .doc 转换为 .pdf。 .doc 在供应商的网站上。要获取 .doc,我们必须单击一个按钮,该按钮会向我们提供 Open, Save, or Cancel
选项。当用户单击 Save
按钮时,它会提示输入位置。用户选择映射驱动器中的位置,例如 S:\Some Folder\abc.doc
,实际文件夹位置是 \server\folder\Some Folder
。这是我的程序发挥作用的地方。我在 c# 中使用 FileSystemWatcher
class 并为 .doc 文件设置了过滤器。我可以在调试中看到文件已找到。文件夹位置被硬编码并保存为上述实际文件夹位置。用户和应用程序对该文件夹具有完全权限。但是,当我 运行 程序时,我得到 FileNotFoundException
。
这就是我的
WriteToFile("Starting Word application");
Application word = new Application();
object missing = Type.Missing;
var sourcefile = new FileInfo(path);
// check if the created file ends with .doc.
System.Diagnostics.Debug.WriteLine(path);
if (!path.ToLower().EndsWith(".doc"))
{
return "";
}
word.Visible = false;
WriteToFile("Opening doc as read only");
// open readonly
System.Diagnostics.Debug.WriteLine(sourcefile.FullName);
var doc = word.Documents.Open(FileName: sourcefile.FullName, ReadOnly: true);
奇怪的是 sourcefile.FullName
没有显示 path
设置的硬编码服务器地址。它将文件路径显示为 S:\Some Folder\abc.doc
,这对我来说毫无意义。这是怎么回事,为什么找不到文件?
我的猜测是您使用了错误的 FileInfo 对象。尝试生成一个新的或使用
System.IO.Path.Combine(@"\server\folder\Some Folder", "sourcefile.Name")
您还可以使用它来生成新的 FileInfo 对象。您正在使用的对象可能是使用映射驱动器的用户对话框之一。您的位置也确实有错字。 \SERVERNAME\
不是 UNC 路径。字符串的开头应该只有两个反斜杠。应该是
@"\server\folder\Some Folder"
WriteToFile("Starting Word application");
Application word = new Word.Application();
object missing = Type.Missing;
var sourcefile = new System.IO.FileInfo(path);
string SomeShare = @"\SomeServer\Someshare\Somepath";
System.IO.FileInfo WorkFile = new System.IO.FileInfo(System.IO.Path.Combine(SomeShare, sourcefile.Name));
// check if the created file ends with .doc.
System.Diagnostics.Debug.WriteLine(path);
if (!path.ToLower().EndsWith(".doc"))
{
return "";
}
word.Visible = false;
WriteToFile("Opening doc as read only");
// open readonly
System.Diagnostics.Debug.WriteLine(sourcefile.FullName);
var doc = word.Documents.Open(FileName: WorkFile.FullName, ReadOnly: true);
}
这对我来说很好用,它更新了正确的 UNC 模式的路径。如果文件仍然不可访问,您应该检查是否可以使用您生成的 UNC 路径在工作站上打开它。
当底层文件仍处于 use/being 写入状态时,OnCreate
事件可能会触发,如果您立即尝试访问它可能会导致问题。
简单的解决方案是引入任意延迟以允许文件被创建它的进程关闭,或者更好的是一个具有短暂延迟的循环,该循环尝试访问该文件,如果它捕获相关异常发生并重试。