4

AWS でホストされている asp.net Web サイトがあります。

この Web サイトから、AWS ボックスに保存されているリストから複数の PDF ファイルを選択して印刷できるようにする必要があります。

現在、私のプロセスでは、一度に 1 つの PDF のみを印刷できます。これは、ブラウザー内の PDF ファイルパスにリダイレクトし、ユーザーがそこから手動で印刷することによって行われますが、印刷するものが多数ある場合、このプロセスは退屈なものになります。

どうすればこれを達成できるかについて誰にもアイデアがありますか?

4

2 に答える 2

0

私の意見では、非常に簡単な方法は、ファイルをプリンターパスにコピーすることです。
これは、Word ドキュメントと PDF の両方で機能します。
ただし、これはいくつかのことを前提としています。

1.) ドキュメントは、コピーできる場所に保存されています。

2.) Web サーバーにプリンタ ドライバがインストールされている。

3.) Adob​​e Reader が Web サーバーにインストールされている必要があります。(そうしないと、プリンターが PDF を認識しないことがあります。)

だから私がすることは、ManagementObjectSearcher を介してサーバー上のプリンターにクエリを実行し、デフォルトのプリンターまたは必要なプリンター パスを取得して、ファイルをパスにコピーすることです。それだ。コードは実にシンプルです。

    public static class PrinterHelper
    {

    public class PrinterSettings
    {
        public string Name { get; set; }
        public string ServerName { get; set; }

        public string DeviceId { get; set; }
        public string ShareName { get; set; }
        public string Comment { get; set; }
        public bool Default { get; set; }
    }

    /// <summary>
    /// Sends the file to printer.
    /// </summary>
    /// <param name="filePathAndName">Name of the file path and Name of File.</param>
    /// <param name="printerName">Name of the printer with Path. E.I. \\SFDPRINT2.raven.ravenind.net\P14401</param>
    public static void SendFileToPrinter(string filePathAndName, string printerName)
    {
        FileInfo file = new FileInfo(filePathAndName);
        file.CopyTo(printerName);
    }

    /// <summary>
    /// Gets all printers that have drivers installed on the calling machine.
    /// </summary>
    /// <returns></returns>
    public static List<PrinterSettings> GetAllPrinters()
    {
        ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Printer");
        ManagementObjectSearcher mos = new ManagementObjectSearcher(query);
        List<PrinterSettings> printers = new List<PrinterSettings>();

        foreach (ManagementObject mo in mos.Get())
        {
            PrinterSettings printer = new PrinterSettings();
            foreach (PropertyData property in mo.Properties)
            {
                if (property.Name == "Name")
                    printer.Name = property.Value == null ? "" : property.Value.ToString();

                if (property.Name == "ServerName")
                    printer.ServerName = property.Value == null ? "" : property.Value.ToString();

                if (property.Name == "DeviceId")
                    printer.DeviceId = property.Value == null ? "" : property.Value.ToString();

                if (property.Name == "ShareName")
                    printer.ShareName = property.Value == null ? "" : property.Value.ToString();

                if (property.Name == "Comment")
                    printer.Comment = property.Value == null ? "" : property.Value.ToString();

                if (property.Name == "Default")
                    printer.Default = (bool)property.Value;
            }
            printers.Add(printer);
        }

        return printers;
    }      
}

これがヘルパーの使い方です。それだ。

            var printer = PrinterHelper.GetAllPrinters().FirstOrDefault(p => p.Default);
            PrinterHelper.SendFileToPrinter(printer.Name, "C:\\Users\\Public\\Documents\\Form - Career Advancement Request.pdf");
于 2012-08-23T17:31:14.287 に答える
0

あなたは小さな間違いを犯しました.ヘルパーの使い方は引数が逆になっています. 最初にファイル名を渡し、次にプリンター名を渡します。

于 2012-11-22T07:46:35.287 に答える