13

私が持っているもの

私は現在、指定されたファイルを受け取り、それに対して何らかのアクションを実行するプログラムを書いています。現在、それを開くか、電子メールに添付して、指定されたアドレスにメールで送信します。

ファイルの形式は、Excel、Excel レポート、Word、または PDF のいずれかです。

私が現在行っているのは、ファイルのパスを使用してプロセスを生成し、プロセスを開始することです。ただし、指定した設定に応じて、動詞「PrintTo」を起動情報に追加する、追加したバグ機能も修正しようとしています。

私が必要なもの

私が達成しようとしているタスクは、ドキュメントを開いてから、プログラム自体で指定された指定されたプリンターに印刷したいということです。その後、ファイルは自動的に閉じます。

これを一般的に行う方法がない場合は、個別のファイル タイプごとに行う方法を考え出すことができるかもしれません。

何が必要

私が使用しているコードは次のとおりです。

ProcessStartInfo pStartInfo = new ProcessStartInfo();
pStartInfo.FileName = FilePath;

// Determine wether to just open or print
if (Print)
{
    if (PrinterName != null)
    {
       // TODO: Add default printer.
    }

    pStartInfo.Verb = "PrintTo";
}

// Open the report file unless only set to be emailed.
if ((!Email && !Print) || Print)
{
    Process p = Process.Start(pStartInfo);
}

調子はどうだ...

まだ困惑しています... Microsoftがそうしているように、「それは設計によるものでした」と呼ぶかもしれません.

4

3 に答える 3

25

以下は私にとってはうまくいきます(* .docおよび* .docxファイルでテスト済み)

Windowsのprinttoダイアログは、「System.Windows.Forms.PrintDialog」を使用して表示され、「System.Diagnostics.ProcessStartInfo」については、選択したプリンターを使用するだけです:)

FILENAMEを Office ファイルのフルネーム (パス + 名前) に置き換えるだけです。これは他のファイルでも機能すると思います...

// Send it to the selected printer
using (PrintDialog printDialog1 = new PrintDialog())
{
    if (printDialog1.ShowDialog() == DialogResult.OK)
    {
        System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo(**FILENAME**);
        info.Arguments = "\"" + printDialog1.PrinterSettings.PrinterName + "\"";
        info.CreateNoWindow = true;
        info.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        info.UseShellExecute = true;
        info.Verb = "PrintTo";
        System.Diagnostics.Process.Start(info);
    }
}
于 2011-03-25T13:14:47.020 に答える
4

理論的には、MSDNの記事によると、次のように変更できるはずです。

// Determine wether to just open or print
if (Print)
{
    if (PrinterName != null)
    {
        pStartInfo.Arguments = "\"" + PrinterName + "\"";
    }

    pStartInfo.CreateNoWindow = true;
    pStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    pStartInfo.UseShellExecute = true;
    pStartInfo.WorkingDirectory = sDocPath;

    pStartInfo.Verb = "PrintTo";
}
于 2011-03-03T15:32:19.883 に答える