我正致力于将word docs和excel转换为pdf并自动完成整个过程。我们有一个服务器应用程序,使用COM互操作打印所有.doc和.xls文件,我们希望将这些文件转换为PDF而不是打印它们。我提到How do I convert Word files to PDF programmatically?和http://www.microsoft.com/en-us/download/details.aspx?id=7将文档转换为PDF,我能够转换它们。当我对该主题进行更多研究时,我发现不建议从服务器端应用程序(Office documents to PDF)调用Office Interop,所以我想使用像我可以配置的PDF打印机驱动程序一样的东西绕过“另存为”对话框。我下载了PDF995并使用以下代码测试输出
string printerName = "PDF995";
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = (@"C:\...\test.XLS");
startInfo.Arguments = "\"" + printerName + "\"";
startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
//startInfo.UseShellExecute = true;
startInfo.Verb = "printto";
using (Process process = new Process())
{
process.StartInfo = startInfo;
process.Start();
if (!process.HasExited)
{
process.WaitForExit();
}
}
它在我的盒子里工作,我需要在服务器上测试它。我刚刚在测试时意识到,我得到了异常"没有与此对象关联的进程"在(!process.hasexited)
行仅用于.xls文件,但不用于.doc和.ppt文件。我想知道为什么,我试图查看进程监视器(https://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)但找不到它。但它确实适用于.doc文件而不抛出异常。知道为什么吗?
我还想知道是否有更好的方法可以解决这个问题?我确实看过像Aspose这样的库将单词翻译成pdf,但问题是我们可能需要为单词购买单独的模块,另一个用于excel,另一个用于幻灯片,这将是昂贵的。因此,我们考虑使用打印机驱动程序,这是处理不同类型文档的理想选择。