c 打印html文档,C# C/S程序使用HTML文件作为打印模板
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: |
c 打印html文档,C# C/S程序使用HTML文件作为打印模板相关推荐
- c 打印html文档,C# C/S程序使用HTML文件作为打印模板
C# C/S程序使用HTML文件作为打印模板 在网上找了一堆的资料,整理到郁闷呀,慢慢试慢慢改,哎,终于成功了,哈,菜鸟伤不起呀 public partial class Print : Form ...
- Java 打印PDF文档 - 指定打印机、自定义纸张大小、设置打印参数、显示打印对话框等
这篇文章介绍如何在Java应用程序中打印PDF文档以及进行一些打印设置,包括指定打印机.自定义纸张大小.设置打印参数.以及显示打印对话框等. 导入jar文件 本文所使用的PDF类库是Spire.PDF ...
- 在线文档可以直接打印吗?哪里可以打印在线文档
什么是在线文档?所谓在线文档是一种支持在线编辑及修改的文档,可以允许多次.实时修改,对于这类的在线文档可以直接打印吗?在线文档在编辑完成后,保存成固定的文档后是可以通过打印机进行打印的. 如果想要打印 ...
- java word打印_如何通过Java打印Word文档
本文将介绍如何使用Java程序来打印Word文档.打印可分为两种方式:一是打印到物理打印机:二是打印到虚拟打印机. 使用工具:Spire.Doc for Java 测试环境: ●Intellij Id ...
- html图片按页码显示,html - 在打印html文档时显示页码 - 堆栈内存溢出
几个月前,当我使用以下代码在浏览器(firefox)中打印HTML文档时,能够显示页码: body { width: 300px; counter-reset: page; } #header { b ...
- java pdf打印_Java 打印PDF文档
本文将介绍如何在Java应用程序中打印PDF文档.一般有以下三种常见打印方式:静默打印 显示打印对话框打印 打印PDF时自定义纸张大小 使用工具:Free Spire.PDF for Java 创建运 ...
- C# 打印PDF文档的10种方法
操作PDF文档时,打印是常见的需求之一.针对不同的打印需求,可分多种情况来进行,如设置静默打印.指定打印页码范围和打印纸张大小.双面打印.黑白打印等等.经过测试,下面将对常见的几种PDF打印需求做一些 ...
- java打印word_Java jacob调用打印机打印word文档
前面说了Java如何生成复杂的Word文档,今年记录下Java如何调用打印机打印word文档. 起初用的是自带的PrintJob,但是系统提供的打印机制并不成熟完整.网上的代码也是千篇一律,在我的打印 ...
- java poi打印word_Java 打印Word文档
本文介绍如何在Java程序中通过物理打印机和虚拟打印机来打印Word文档的方法.文中使用了类库Spire.Doc for Java,可通过官网下载jar文件并导入程序或者直接通过maven仓库安装导入 ...
- C#通过调用WinApi打印PDF文档类,服务器PDF打印、IIS PDF打印
其他网站下载来的类,可以用于Winform.Asp.Net,用于服务器端PDF或其他文件打印. 直接上代码: using System; using System.Collections.Generi ...
最新文章
- Alpha 冲刺 (2/10)
- 馀承东鸿蒙发布会,余承东确认出席发布会!荣耀智慧屏-首发搭载鸿蒙系统
- Vue creatElement
- JSON和JSONP
- vbs删除非空文件夹
- mysql图片路径varchar大小_Mysqlvarchar大小长度问题_MySQL
- SpringBoot_入门-微服务简介
- Coding and Paper Letter(三十九)
- mysql 中常用的基本操作
- 什么样的项目适合自动化测试
- linux 采集 bash 脚本,Linux shell脚本攻略(2)
- 深入理解Yii2.0 (2)事件Event
- 类似构建的操作性工作,可以轮流值班
- Linux内核移植操作步骤
- python 题库项目_python 题库|刷题
- l0phtcrack 7(爆破管理员密码)使用教程
- asp支付宝支付接口手机版asp支付宝支付接口pc版asp支付宝二维码支付免费下载
- Maven 入门学习.md
- HDU 4416 (后缀自动机)
- 数据结构杂谈(七)——串
热门文章
- java怎么设置窗体title_自定义Java窗口标题栏菜单
- android studio按键精灵,51模拟器怎么连接按键精灵 51安卓模拟器按键精灵连接教程...
- 删除计算机网络无用设备,如何删除我的电脑/计算机中无效的设备和驱动器图标...
- Excel VBA入门教程
- java简单入门教程_史上最快速最简单的java入门教程
- C++读取Access数据库
- unix linux性能对比,各有所长!对比LINUX和UNIX系统优势
- robocopy复制文件_Windows Robocopy命令教程以及以安全方式复制文件的示例
- vue小案例---cnode
- jQuery 帮助文档 api