using Common.system;
using Microsoft.Win32;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing.Printing;
using System.Runtime.InteropServices;
namespace XHWK.WKTool.Utils
{
internal class ZPrintUtils
{
private static readonly PrintDocument FPrintDocument = new PrintDocument();
///
/// 获取本机默认打印机名称
///
///
public static string DefaultPrinter()
{
return FPrintDocument.PrinterSettings.PrinterName;
}
///
/// 获取打印机列表
///
///
public static List GetLocalPrinters()
{
List fPrinters = new List();
try
{
fPrinters.Add(DefaultPrinter()); //默认打印机始终出现在列表的第一项
}
catch (System.Exception ex)
{
LogHelper.Logerror.Error("添加默认打印机" + ex.Message, ex);
}
try
{
foreach (string fPrinterName in PrinterSettings.InstalledPrinters)
{
if (!fPrinters.Contains(fPrinterName))
{
fPrinters.Add(fPrinterName);
}
}
}
catch (System.Exception ex)
{
LogHelper.Logerror.Error("添加其它打印机" + ex.Message, ex);
}
return fPrinters;
}
///
/// 调用win api将指定名称的打印机设置为默认打印机
///
///
///
[DllImport("winspool.drv")]
public static extern bool SetDefaultPrinter(string name);
///
/// 打印
///
/// 打印文件的路径
/// 打印机的名称
public static void Print(string pdfPath, string printerName)
{
//设置默认打印机
SetDefaultPrinter(printerName);
Process p = new Process();
//不能启动进程是否显示错误弹窗,如果文件没有打开方式会提示选择文件的打开方式
p.StartInfo.ErrorDialog = true;
//不显示调用程序窗口,但是对于某些应用无效
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
//采用操作系统自动识别的模式
p.StartInfo.UseShellExecute = true;
//要打印的文件路径
p.StartInfo.FileName = pdfPath;
//指定执行的动作,是打印,即print,打开是 open
p.StartInfo.Verb = "print";
//开始打印
p.Start();
//等待15秒
p.WaitForExit(15000);
}
///
/// 是否安装AcroRd32
///
///
public static bool IsExistAcroRd32()
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRd32.exe");
return key != null;
}
public static bool Print2(string pdfPath)
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRd32.exe");
if (key != null)
{
string acroRd32Path = key.GetValue("").ToString();
string args = $"/P \"{pdfPath}\"";
Process.Start(acroRd32Path, args);
return true;
}
return false;
}
catch
{
// ignored
}
return false;
}
public static void InstallAcroRd32ByUser()
{
string downloadUrl = "https://xhkjedu.oss-cn-huhehaote.aliyuncs.com/runtime/AcroRdrDC1900820071_zh_CN.exe";
Process.Start(downloadUrl);
}
}
}