一、打印样式

  区别显示和打印的样式

  使用media="print"控制打印时的样式,如下:

打印时不显示打印按钮,设置页面宽度

    <style media="print">
.toolbox {
display: none;
} .container {
max-width: 210mm;
}
</style>
<style>
.container {
margin: 0 auto;
max-width: 960px;
}
<style>

  使用独立的样式文件

<link rel="stylesheet" type="text/css" media="screen" href="mycss.css">
<link rel="stylesheet" type="text/css" media="print" href="myprintcss.css">

  css里media的使用

  我们在网页里引用外部的css文件时,通常是用如下的代码:<link rel="stylesheet" type="text/css" href="mycss.css">

实际上,上面的link对象里,我们是省略了一个叫“media”的属性,这个属性指定样式表规则用于指定的设备类型。它有如下值可用:
all-- 用于所有设备类型 
aural-- 用于语音和音乐合成器 
braille-- 用于触觉反馈设备 
embossed-- 用于凸点字符(盲文)印刷设备 
handheld-- 用于小型或手提设备 
print-- 用于打印机 
projection-- 用于投影图像,如幻灯片 
screen-- 用于计算机显示器 
tty-- 用于使用固定间距字符格的设备。如电传打字机和终端 
tv-- 用于电视类设备

这么多的值,并不是每个都可用,因为浏览器厂商并没有全部实现它们。

二、分页打印

  打印需要分页时,但是自动分页又无法满足自己的需求时,需要手动分页

<style type="text/css">
  .pageBreak{ page-break-after:always;}
  .pageBreakBefore{ page-break-before:always;}
</style>

css里用于打印的属性

page-break-after : auto | always | avoid | left | right | null
参数:

auto : 假如需要在对象之后插入页分割符 
always :始终在对象之后插入页分割符 
avoid : 避免在对象后面插入页分割符 
left : 在对象后面插入页分割符直到它到达一个空白的左页边 
right :在对象后面插入页分割符直到它到达一个空白的右页边 
null : 空值。IE5用来取消页分割符设置

这个page-break-after,主要用来在打印时插入一个分页符,分页就靠它了。它还有个双胞胎的兄弟,叫page-break-before,参数和它一样,看名字即知道它是用来在对象之前插入分页符。

示例如下:

<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Paginated HTML</title>
<style type="text/css" media="print">
div.page
{
page-break-after: always;
page-break-inside: avoid;
}
</style>
</head>
<body>
<div class="page">
<h1>This is Page 1</h1>
</div>
<div class="page">
<h1>This is Page 2</h1>
</div>
<div class="page">
<h1>This is Page 3</h1>
</div>
</body>
</html>

打印模板

  关于.NET实现按模板分页的部分关键代码

样式

<link rel="stylesheet" href="@Url.Content("~/Content/normalize.css")">
<style media="print">
.toolbox {
display: none;
} .container {
max-width: 210mm;
}
</style>
<style>
.container {
margin: auto;
max-width: 960px;
}
.table-wrap {
width: %;
height: 903px;
}
table > * {
font-size: 14px !important;
} table {
border-collapse: collapse;
border: 1px solid black;
width: %;
} table tr th {
height: 20px;
} table tr td {
border: 1px solid black;
text-align: center;
} table tr td.left {
border: 1px solid black;
text-align: left;
padding-left: 5px;
} .page-foot {
margin-top: 10px;
text-align: center;
width: %;
} .pageBreakBefore {
page-break-before: always;
-webkit-break-inside: avoid;
page-break-inside: avoid;
} .subbox {
text-align: center;
} .footbox {
display: block;
} .namebox {
display: inline-block;
width: %;
margin-top: 10px;
} .hospitalName {
width: 200px;
text-align: center;
} .timeSpan {
width: 200px;
text-align: center;
} .text_line {
text-decoration: underline;
} .toolbox {
margin-top: 10px;
text-align: right;
} .wp10 {
width: %;
} .wp20 {
width: %;
} .wp50 {
width: %;
}
</style>

html

<div class="toolbox">
<span>提醒:在非ie打印预览时,通过预览界面的“更多设置”去掉页面上的页眉页脚。 &emsp; </span>
<button id="btnPrint">打印</button>
<button onclick="closeWin()">关闭页面</button>
</div>
        @for (int index = ; index < Model.List.Count;)
{
<h2 style="text-align: center;"> @string.Format("{0}服务周报", Model.CompanyName) </h2>
<p class="subbox">
<span class="hospitalName">甲方名称 <strong class="text_line">@Model.PartyACompanyName</strong> </span>
<span class="timeSpan">日期 <strong class="text_line">@Model.StartDate</strong> 至 <strong class="text_line">@Model.EndDate</strong></span>
</p>
<div class="table-wrap">
<table>
<tbody>
<tr>
<th class="wp10">序号</th>
<th class="wp40">标题</th>
<th class="wp20">姓名</th>
</tr>
@{
for (var j = ; j < ; j++)
{
if (index < Model.List.Count)
{
<tr>
<td class="wp10">@(index + )</td>
<td class="left wp40">@Model.List[index].Title</td>
<td class="wp20">@Model.List[index].UserName</td>
</tr>
index++;
}
}
}
</tbody>
</table>
</div>
<div class="footbox">
<div class="namebox"> <span class="hospitalName">甲方: ____________ </span>
<span class="timeSpan"> 日期: ____________ </span> </div>
<div class="namebox" style="text-align: right; width: 49%;"> <span class="hospitalName">乙方: ____________ </span>
<span class="timeSpan"> 日期: ____________ </span> </div>
<div class="page-foot">第@((index + ) / + (index % > ? : ))页</div>
</div>
<div class="pageBreakBefore"></div>
}

脚本

    <script src="~/Scripts/jquery-2.2.0.min.js"></script>
<script>
function pagesetup_null() {
var hkey_root, hkey_path, hkey_key;
hkey_root = "HKEY_CURRENT_USER";
hkey_path = "\\Software\\Microsoft\\Internet Explorer\\PageSetup\\";
try {
var RegWsh = new ActiveXObject("WScript.Shell");
hkey_key = "header";
RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "");
hkey_key = "footer";
RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "");
} catch (e) {
}
} $(function () {
$("#btnPrint").click(function () {
var explorer = window.navigator.userAgent;
if (explorer.indexOf("MSIE") >= ) {
pagesetup_null();
}
window.print();
});
}); function closeWin() {
window.open("", "_self").close();
}
</script>

参考与分享:

分享几款免费的web打印控件

WEB打印系列教程之二--使用WScript.Shell通过编程方式进行复杂的WEB打印设置

WEB打印系列教程之三--简单的WEB打印分页设置

每页都有的表头和打印分页

WEB打印-网页打印功能(带分页、可多页打印)

Google Chrome打印分页符

web打印中如何强制分页

web打印总结的更多相关文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-Web打印

    系列目录 前言 1.本次主要弥补工作流,用户表单数据的打印 2.使用JQprint做为web打印插件 3.兼容:FireFox,Chrome,IE. 4.没有依赖也没有配置,使用简单 代码下载:htt ...

  2. Web打印--Lodop API

    Lodop是一款专业的WEB打印控件,其设计目标是简单易用.功能足够强大,开创WEB打印开发的新局面. Lodop设计者对WEB下的打印开发任务进行了分类汇总,高度抽象,设计出仅用几个功能函数,就可实 ...

  3. Web打印控件

    Lodop是什么? 有人说她是Web打印控件,因为她能打印.在浏览器中以插件的形式出现,用简单一行语句就把整个网页打印出来: 有人说她是打印编程接口,因为她介于浏览器和打印设备之间,是个通道和桥梁,几 ...

  4. JS Web打印,实现预览新样式

    问题描述:     JS实现Web打印,要求打印前一种样式,打印预览时新样式 问题解决:         (1)设置打印时的css样式,设置打印前的css样式 注:         以上为print. ...

  5. Web打印控件smsx.cab使用说明

    在项目开发中,经常会用到页面打印的功能,在ASP.NET环境下推荐一款web打印控件smsx.cab.    使用方法:一般会先定义一个用于打印的母版页(Print.Master),在母版页上做好布局 ...

  6. 2013第39周一Web打印

    2013第39周一Web打印 项目中遇到了Java Web打印问题,简单调用IE浏览器的打印不能完全满足要求,于是就搜集了Web打印相关的主题,简单汇总一下.web打印难点在分页.页面纸张设置,页眉页 ...

  7. WEB打印插件Lodop

    Lodop.C-Lodop使用说明及样例   Lodop(标音:劳道谱,俗称:露肚皮)是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码直接实现 复杂打印.控件功能强大,却简单易用,所有调用如 ...

  8. WEB打印插件jatoolsPrinter

    为什么选择 jatoolsPrinter 免费版? 支持无预览直接打印 真正免费,不加水印,没有ip或域名限制,不限时间,兼容ie6+ 无须注册,下载即用 提供经过微软数字签名的cab自动安装包,安装 ...

  9. 网页WEB打印控件

    网页WEB打印控件制作 在WEB系统中,打印的确是比较烦人的问题,如果我们能制作一个属于自己的自定义的打印插件,那么我们在后续自定义打印的时候能随心所欲的控制打印,这样的效果对于程序员来说是非常开心的 ...

  10. WEB打印的几种方案

    -------------------------------------------一  基于Web的打印方案比较分析-------------------------------- 基于web的套 ...

随机推荐

  1. C++反汇编第四讲,反汇编中识别继承关系,父类,子类,成员对象

    C++反汇编第四讲,反汇编中识别继承关系,父类,子类,成员对象 讲解目录: 1.各类在内存中的表现形式   备注: 主要复习开发知识,和反汇编没有关系,但是是理解反汇编的前提.     2.子类继承父 ...

  2. linux系统下安装配置解压版的MySQL数据库

    一.解压文件到当前目录 命令:tar -zxvf mysql....tar.gz 二.移动解压完成的文件夹到目标目录并更名mysql 命令:mv mysql-版本号 /usr/local/mysql ...

  3. 初识java这个小姑娘(二)

    妙解垃圾回收机制 周一,早高峰. 一段考验一个人耐力.智力.开车技术以及脾气的路. 我把车开进了一个没有红绿灯的丁字路口,然后就没有然后了. 来自三个方向的大车小车开始在不大的一块空间里开始互相斗智斗 ...

  4. while(true)应用 之 实现自己的消息队列

    早些时候,一直有个疑问,就是比如你从前端发一个操作之后,后台为什么能够及时处理你的东西呢?当然了,我说的不是,服务器为什么能够立即接收到你的请求之类高大上的东西.而是,假设你用异步去做一个事情,而后台 ...

  5. Python爬虫(十八)_多线程糗事百科案例

    多线程糗事百科案例 案例要求参考上一个糗事百科单进程案例:http://www.cnblogs.com/miqi1992/p/8081929.html Queue(队列对象) Queue是python ...

  6. java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@412d7230

    近期遇到了如标题这种错误,再次记录解决方法.本文參考帖子: http://bbs.csdn.net/topics/390196217 出现此bug的原因是在内存回收上.里面用Bitamp的代码为: t ...

  7. Implement Queue using Stacks(用栈实现队列)

    Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ...

  8. Android 编程之入门开发目录管理器开发文件事件操作-2

    上一篇博客,我们已经得到了目录列表,我们须要对文件列表子项加入事件,比方我们点击的是文件.就运行 打开操作,点击的是目录运行打开目录操作,遍历文件清单.以此类推直到最后一个是文件位置,关于文件 与目录 ...

  9. iOS_正則表達式

    iOS 正則表達式 正則表達式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE).计算机科学的一个概念. 正則表達式使用单个字符 ...

  10. JAVA入门[6]-Mybatis简单示例

    初次使用Mybatis,先手写一个hello world级别的例子,即根据id查询商品分类详情. 一.建表 create table Category ( Id INT not null, Name ...