最新折腾这个事儿,记录一下
首先,后台exe程序使用c#创建的控制台程序。代码简单,如下:
static void Main(string[] args)
{
try
{
Console.WriteLine("参数个数:" + args.Length);
Console.ReadLine();
if (args.Length == 0)
return;
Console.WriteLine("第一个参数:" + args[0]);
Console.ReadLine();
string filename = args[0].Substring(12, args[0].Length - 12);
if (!File.Exists(filename))
return;
Console.WriteLine("打印中...");
FileStream fs = new FileStream(filename, FileMode.Open);
byte[] nb = new byte[fs.Length];
fs.Read(nb, 0, nb.Length);
fs.Close();
//删除文件
File.Delete(filename);
//string fileBase = Convert.ToBase64String(nb);
//Console.ReadLine();
//转换base64 为 pdf文件或流
//Console.WriteLine("第一个参数:" + args[0].Substring(12, args[0].Length - 12));
//Console.ReadLine();
//byte[] base64 = Convert.FromBase64String(fileBase);
Stream str = new MemoryStream(nb, 0, nb.Length);
PdfDocument doc = new PdfDocument();
//doc.LoadFromFile(args[0].Substring(12, args[0].Length - 12));
doc.LoadFromStream(str);
doc.PrintDocument.Print();
}
catch (Exception ex)
{
Console.WriteLine("出现错误:" + ex.Message);
Console.ReadLine();
}
//Console.ReadLine();
}
前端html页面上,分为两种调用方式:
第一种,使用注册表进行注册后,调用该注册表值,称为URL Protocol
步骤如下:
打开记事本,输入以下内容,其中QCEEQPLUS改为你自己的调用名称,程序路径改成你自己的:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\OCEEQPLUS]
@="OCEEQPLUS Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\OCEEQPLUS\DefaultIcon]
@="F:\\test\\pdf-print.exe,1"
[HKEY_CLASSES_ROOT\OCEEQPLUS\shell]
@=""
[HKEY_CLASSES_ROOT\OCEEQPLUS\shell\open]
@=""
[HKEY_CLASSES_ROOT\OCEEQPLUS\shell\open\command]
@="\"F:\\test\\pdf-print.exe\" \"%1\""
将此文件存为reg,注册表文件,双击运行。得到成功提示。
然后在html上,如下代码调用
测试
注意,这里的QCEEQPLUS是你的注册名称,//后面是你的参数。调用后参数在main函数的strs里面。自己打印出来看
第二种HTML调用方式,WScript.Shell:
直接上js代码
function print() {
var Shell = new ActiveXObject("WScript.Shell");
try {
//exe程序所在位置 以及要传的参数,以空格分开
var print = "F:\\test\\pdf-print.exe F:\\test\\aaa.pdf";
//print传递参数,1窗口显示方式,true是否等待执行完成
var rs = Shell.run(print,1,true);
alert(rs);//返回0,代表执行成功
}
catch (e) {
alert("该可执行文件不存在");
}
}
同上,调用后参数在main函数的strs里面。自己打印出来看