c 打印html文档,C# C/S程序使用HTML文件作为打印模板

本文详细讲述了如何在C#中通过WebBrowser对象加载HTML模板,并利用Win32 API控制页面设置,实现打印功能。作者分享了注册表修改、页面设置模拟点击及打印后文件清理的过程,适合菜鸟入门学习。
摘要由CSDN通过智能技术生成

C#   C/S程序使用HTML文件作为打印模板

在网上找了一堆的资料,整理到郁闷呀,慢慢试慢慢改。哎,最终成功了,哈,菜鸟伤不起呀

public partial class Print : Form

{

// 定义dgSetPage托付进行打印时的选项设置

public delegate void dgSetPage();

//定义dgFileDelete 托付进行打印完毕后。删除填充后的模板文件

public delegate void dgFileDelete();

[DllImport("User32.dll", EntryPoint = "FindWindow")]

private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("User32.dll", EntryPoint = "FindWindowEx")]

private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName);

[DllImport("User32.dll", EntryPoint = "SendMessage")]

public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);

//定义SendMessage方法内使用的鼠标单击 常量

const int BM_CLICK = 0xF5;

private void btnPrint_Click(object sender, EventArgs e)

{

btnPrint.Enabled = false;

//由于是使用WebBrowser对象进行打印HTML文件,所以无法控制页面设置,须要使用注冊表改动一些内容

//方法 ChangePageSettingByRegist 。改动注冊表,取消页眉、页角项目

ChangePageSettingByRegist();

//读取数据填充HTML模板

string sFillDataResult=FillDataToNewFile();

if (sFillDataResult.IndexOf("NG") >= 0)

{

MessageBox.Show(sFillDataResult);

return;

}

pd_PrintPage();

btnPrint.Enabled = true;

}

private void pd_PrintPage()

{

//创建一个WebBrowser对象,然后用它在后台打开并解释HTML文件

WebBrowser webBrowserForPrinting = new WebBrowser();

//  lblNewFile.Text  保存是填充后的模板文件名称            webBrowserForPrinting.Url = new Uri(Application.StartupPath.ToString() + "\" +  lblNewFile.Text);

//当载入文件完毕后激发手动追加的事件

webBrowserForPrinting.DocumentCompleted +=   new WebBrowserDocumentCompletedEventHandler(PrintDocument);

webBrowserForPrinting.Focus();

}

private void PrintDocument(object sender,WebBrowserDocumentCompletedEventArgs e)

{

//创建一个新的线程,用于当弹出页面设置对话框时发送设置为横向的指令

Thread th = new Thread(new ThreadStart(new dgSetPage(SetPage)));

th.Start();

//弹出页面设置对话框-----即上方定义的新进程须要处理的窗体

((WebBrowser)sender).ShowPageSetupDialog();

//打印

((WebBrowser)sender).Print();

//释放资源

((WebBrowser)sender).Dispose();

//删除填充后的模板文件,防止反复打印

System.IO.File.Delete(lblNewFile.Text);

lblNewFile.Text = "";

}

//  此处方式被凝视掉了,由于假设须要改动主窗体内控件的内容或者状况里须要使用托付调用改动方法

//  须要时,把SetPage与SetPage2名称互换就可以在变更后的名称为SetPage2内加入改动主窗体内容的代码

//private void SetPage2()

//{

//    //新建托付对象

//    MethodInvoker In = new MethodInvoker(SetPage2);

//    this.BeginInvoke(In);

//}

private void SetPage()

{

int i = 0;

//      此处须要设置循环查找时间。眼下为超过10秒未找到结束查找          while (true)

{

IntPtr WindownHand = FindWindow("#32770", "页面设置");

if (WindownHand != IntPtr.Zero)

{

//找到窗体内子项目的名柄,然后模拟鼠标左键单击事件

IntPtr Wk = FindWindowEx(WindownHand, IntPtr.Zero, null, "横向(&A)");

SendMessage(Wk, BM_CLICK, 0, 0);

IntPtr Wk1 = FindWindowEx(WindownHand, IntPtr.Zero, null, "确定");

SendMessage(Wk1, BM_CLICK, 0, 0);

break;

}

else

{

if (i > 20)

break;

Thread.Sleep(500);

i++;

}

}

}

//改动注冊表,把页眉页脚拿掉。然后设置为缩放至一页

private void ChangePageSettingByRegist()

{

RegistryKey hklm = Registry.CurrentUser;

RegistryKey software = hklm.OpenSubKey(@"SoftwareMicrosoftInternet ExplorerPageSetup".ToUpper(), true);

object A = (object)"";

object B = (object)"0.5";

object C = (object)"0";

software.SetValue("header", A);

software.SetValue("footer", A);

software.SetValue("margin_bottom", B);

software.SetValue("margin_left", C);

software.SetValue("margin_right", C);

software.SetValue("margin_top", C);

software.SetValue("Shrink_To_Fit","yes");

}

HTML模板内容片段

  占位符,用于替换

Machine Protocol
Purchase Order No:Unit No:Region:Assembly date:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值