【问题标题】:C# System.Diagnostics.Process verb issueC# System.Diagnostics.Process 动词问题
【发布时间】:2009-12-04 18:28:52
【问题描述】:

我有一个用 C# VS 2008 编写的 Windows 应用程序。这个应用程序的目的是将任何文件转换为 PDF 文件。我找到了可以转换文件的代码,但是我遇到了一个小问题。

首先是代码:

        private void PrintToAdobePDF(string strInputFilePath)
    {
        ProcessStartInfo pProcInfo = new ProcessStartInfo();
        bool blResult;

        blResult = SetDefaultPrinter(D2P_Adobe_Printer);
        if (blResult)
        {
            pProcInfo.FileName = strInputFilePath;
            pProcInfo.Verb = "Print";
            pProcInfo.CreateNoWindow = true;
            pProcInfo.WindowStyle = ProcessWindowStyle.Hidden;

            Process pProc = Process.Start(pProcInfo);
            pProc.WaitForExit(1000);
            pProc.CloseMainWindow();
            pProc.Close();
        }

我遇到的问题是,当调用 Process.Start() 方法时,它使用两个动词而不是我指定的一个动词(“打印”)运行。它正在运行“打开”和“PrintTo”,这使得原始文件派生的应用程序打开并挂起应用程序(即 jpg 打开 Windows 传真和图片查看器)。 我的问题是如何在 Process.Start() 方法中使用“打印”动词?

提前谢谢你

【问题讨论】:

    标签: c# system.diagnostics


    【解决方案1】:

    您是否尝试过研究是否可以使用命令行参数执行 Adob​​e Reader 来完成同样的事情?有时依赖外壳是不可靠的。

    【讨论】:

    • 我是一名优秀的程序员,但我之前没有在 C# 中使用过命令行参数。对此的任何帮助都会很棒。我确实可以使用 Adob​​e 9 SDK。
    • support.adobe.com/devsup/devsup.nsf/docs/52080.htm你应该可以直接执行阅读器程序,将路径传递给PDF文件并包含将打印它的开关。
    • 关于执行命令行参数的建议效果很好,谢谢。
    【解决方案2】:

    为 strInputFilePath 发送什么?文档说只发送文件名,所以如果您发送可能导致问题的整个路径。

    【讨论】:

    • 我正在发送路径和原始完整文件名(包括扩展名)(需要该路径,因为这最终将从服务器中提取文件。我应该只发送不带扩展名的文件名吗?
    • 根据文档是的..如果解决方案存在于同一个服务器上,它应该没问题。
    【解决方案3】:

    不,发送不带扩展名的文件名会失败。

    最终使用 System.Diagnostics.Process 打印任意文件充其量是不可预测的。这完全取决于您的操作系统如何处理每种类型的文件,以及您的注册表是否已正确配置为处理该文件。

    我猜想以这种方式打印 .doc 文件可能工作正常,而其他文件类型可能效果不佳。

    在我看来,您应该对允许“自动”打印的文件类型有一些限制,并为每种类型的文件构建有效的解决方案。否则,你会发现很多不可预知的行为。

    【讨论】:

    • 这很有意义。我确实有一种将图像文件转换为 PDF 的方法,但是,愚蠢的我删除了它并且没有将代码保存在任何地方。此外,它效率不高,图像变得混乱。
    猜你喜欢
    • 2013-08-28
    • 2011-01-15
    • 1970-01-01
    • 2011-05-02
    • 2011-02-05
    • 1970-01-01
    • 2016-05-13
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多