5

現時点では説明できない理由により、ドキュメントを印刷しようとしたときに Adob​​e Reader ウィンドウが開かないようにする必要があります。私の前にこれに取り組んでいた開発者は、次のフラグを設定していますが、それらが何のためにあるのかはよくわかりません-

if (RegistryManager.GetAcrobatVersion() >= 9.0f)
    printerArg = "\"" + printerName + "\"";
else
    printerArg = printerName;

Process myProc = new Process();
myProc.StartInfo.FileName = fileName;
myProc.StartInfo.Verb = "printto";
myProc.StartInfo.UseShellExecute = true;
myProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProc.StartInfo.CreateNoWindow = true;
myProc.StartInfo.Arguments = "\"" + printerName + "\"";


bool result = myProc.Start();


if (myProc.WaitForInputIdle())
{
    if (!myProc.HasExited)
    {
        myProc.WaitForExit(Convert.ToInt32(5000));
        myProc.Kill();
    }
}
myProc.Close();

どんな助けでも大歓迎です!

ありがとう、
テジャ。

4

3 に答える 3

6

あなたの質問に具体的に答えることはできませんが、Adobeがバージョン9または10でReaderを変更したため、印刷ダイアログを抑制できず、ウィンドウ自体が表示され続けたため、これを行うことができないことがわかりました。また、私のユーザーはそれぞれ異なるバージョンの Reader をインストールしていたため、一貫して機能するものは何もありませんでした。とにかく試してみたい場合は、Reader の API を見てください。正しい COM ライブラリへの参照を追加して、そこから移動する必要があります。痛い。

GhostScriptを介して PDF を実行することで、Adobe を完全に削除することになりました。以下は、仕事をするために作成したヘルパー クラスです。gsExePathのようなものでなければなりませんC:\Program Files\gs\gs8.71\bin\gswin32c.exe

public class GSInterface
{
    public string GhostScriptExePath { get; private set; }

    public GSInterface(string gsExePath)
    {
        this.GhostScriptExePath = gsExePath;
    }

    public virtual void CallGhostScript(string[] args)
    {
        var p = new Process();
        p.StartInfo.FileName = this.GhostScriptExePath;
        p.StartInfo.Arguments = string.Join(" ", args);
        p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

        p.Start();
        p.WaitForExit();
    }


    public void Print(string filename, string printerName)
    {
        this.CallGhostScript(new string[] {
            "-q",
            "-sDEVICE=mswinpr2",
            "-sPAPERSIZE=a4",
            "-dNOPAUSE",
            "-dNoCancel",
            "-dBATCH",
            "-dDuplex",
            string.Format(@"-sOutputFile=""\\spool\{0}""", printerName),
            string.Format(@"""{0}""", filename)
        });
    }
}

以下は、Windows の既定のプリンターに出力されます。

var printerName = new System.Drawing.Printing.PrinterSettings().PrinterName;
var gs = new GSInterface(gsExePath);
gs.Print(filename, printername);
于 2011-04-01T03:35:16.413 に答える
2

これは、私が作業しているコンピューター、またはより広くは、Windows 7 がインストールされた PC 上のこのバージョンの Adob​​e (10) にのみ適用される可能性がありますが、.次のようにして、他のアプリケーションで pdf を開きます。

コントロール パネル > (デバイスと) プリンター > [Adobe PDF] をダブルクリック > [プリンター] > [印刷設定] をクリック > [Adobe PDF 設定] タブの [Adobe PDF の結果を表示] のチェックを外します。

于 2011-06-24T18:32:22.097 に答える
1

Adobe Reader の「/n」パラメータを使用すると便利な場合があります。少なくとも、プログラムはフォーカスを維持します。ただし、リーダーの 1 つのインスタンスは開いたままです。

AcroRd32.exe /n /t ...

参照:質問 619158

于 2012-01-10T13:09:15.593 に答える