最近遇到项目中需要在浏览器中一键打印 远程PDF文件,经过网上搜集资料最终选择了在客户端安装adobe reader后,实现上从服务器端下载一个pdf文件流,在IE中用adobe插件打开(在前台页面中隐藏Object标签),然后用adobe的打印菜单通过printWithDialog()打印。
源码如下:

<input type="button" value="toPrinter" onclick="directpdfprint('')">
<div id="createPDFDIV" style="text-align:center;margin:0 auto;height:1px;width:1px" ></div>
/*** PDF文件直接打印 需安装adobe reader,并在浏览器加载项中启用Adobe加载项adobe PDF Reader;* 可以打印带有汉字名称的PDF文件*/
function directpdfprint(srcFile) {debugger;var pdfprint = document.getElementById("createPDF");if (pdfprint != undefined && pdfprint != null) {var parentNode = pdfprint.parentNode;parentNode.removeChild(pdfprint);}var pdfprintdiv = document.getElementById("createPDFDIV");var p = document.createElement("object");try {p.id = "createPDF";p.classid = "CLSID:CA8A9780-280D-11CF-A24D-444553540000";p.width = 1;p.height = 1;p.src = encodeURI(encodeURI(srcFile));// 处理中文名称pdfprintdiv.appendChild(p);p.printWithDialog();// 带打印窗口的直接打印// p.printAll();//直接打印} catch (e) {// alert(e);$.messager.alert("提示", '请确保已安装Adobe,并开启Adobe加载项!' + e, "warning");}
}
  1. 打开浏览器窗口,页面中进行打印,开始点击打印时,弹出一个新的窗口window.open(url,”_blank”);//url为生成PDF的url,在这个新的页面中有PDF文件的内容,而且网页上也刚刚有打印的功能,这种看起来是最简单的,但是对用户而言,需要点击二次按钮才能真正打印。所以,用户体验不会太好。
  2. adobe reader插件的方法,获取远程PDF文件URL,如果用户安装了PDF的浏览器支持,打开后用户的浏览器可以直接在浏览器中运行adobe reader加载项。然后由用户选择是否打印(一键打印PrintAll()或者PrintwithDialog())。实现简单,但需安装Adobe,在安装中一定程度上相当影响用户体验。本文最终选择这种方法。
  3. 百度文库的方法,使用flash制作一个PDF阅读器,在flash上面加上打印按钮,不用用户安装了adobe reader阅读器,实现的技术却很高,而且用户要求不进行预览。
  4. 浏览器window.print()的方法,利用iframe,将PDF文件的内容包含其中,这个时候调用window.print()来弹出打印窗口。浏览器打印功能菜单的一种程序调用。与点击打印功能菜单一样,不能精确分页,不能设置纸型,可以让用户不用去点菜单,直接点击网页中的一个按钮,或一个链接里面调用。
    代码如下:
//创建一个空的iframe,因为如果每次请求都生成PDF,那么是不必要的。
<iframe style="display:none" id="printIframe"></iframe>$(document).ready(function(){....$("#printIframe").load(function(){//等待iframe加载完成后再执行doPrint.每次iframe设置src之后都会重新执行这部分代码。doPrint();});....
});
//点击打印按钮,触发事件
function printPDF(){var src = $("#printIframe").attr("src");if(!src){//当src为空,即第一次加载时才赋值,如果是需要动态生成的话,那么条件要稍稍变化一下$("#printIframe").attr("src","./attachment/Images.pdf");//暂时静态PDF文件}else$("#printIframe")[0].contentWindow.print();//不知为什么在IE中一直无法打印文件}

不知为什么我在IE中一直无法打印PDF文件,此外要使用浏览器自带的打印功能,还需要去掉那些页眉页脚信息。
一、通过JavaScript 程序来设置,其实主要是用ActiveX控件来实现,出于安全方面的考虑,现在大多数浏览器已经禁用了“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本”这一功能。如下图所示,
这个是以IE 8为例说明的,具体位置在:工具->Internet 选项->安全(最上面一排标签的第二个)->选中“Internet”图标时,单击“自定义级别”

因为这一功能是禁用的,所以通常JavaScript或者其他脚本都无法生效,即无法通过程序直接实现,需要先解除这一禁止项,程序才能起作用,但解除禁止项后会带来安全方面的隐患。

相关JavaScript代码:

<script language="javascript"><!--
var HKEY_Path = "HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\PageSetup\\"; // 定义注册表位置
// name的值可为header(页眉),footer(页脚),margin_bottom(下边距margin_left(左边距),margin_right(右边距),margin_top(上边距)。
function PageSetup(name,value) {
try {var Wsh = new ActiveXObject("WScript.Shell");Wsh.RegWrite(HKEY_Path+name,value); // 修改注册表值
}catch(e) {//alert(e.name+" "+e.message);//alert('需要运行ActiveX对象后,才能进行打印设置。');
}
}
function setit() {
PageSetup("footer","");
PageSetup("header","");
window.print();
}
//--></script>

二、直接修改浏览器的设置,还是以IE8为例来进行说明

打开要打印的网页后,单击“文件”->“打印预览”->页面设置(图标,如下图所示)->页眉和页脚都设置为空,这样设置后,打印的时候就不会出现页眉页脚信息了。

三、直接修改注册表

打开记事本,复制下面的程序

Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup]
"footer"=""
"header"=""

另存为“去掉页眉页脚.reg”,然后双击运行,确认即可。
收藏一个JS 实现简单的页面局部打印的方法 :

function preview(oper)
...{
if (oper < 10)...{
bdhtml=window.document.body.innerHTML;//获取当前页的html代码
sprnstr="<!--startprint"+oper+"-->";//设置打印开始区域
eprnstr="<!--endprint"+oper+"-->";//设置打印结束区域
prnhtml=bdhtml.substring(bdhtml.indexOf(sprnstr)+18); //从开始代码向后取html  prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));//从结束代码向前取html
window.document.body.innerHTML=prnhtml;
window.print();
window.document.body.innerHTML=bdhtml;  } else ...{
window.print();
}  }  

使用很简单 将页面内要打印的内容加入中间XXXXX
再加个打印按纽 οnclick=preview(1)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="WebApplication2.Test" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title><script type="text/javascript" language="javascript">function printdiv() {var newstr = document.getElementById("PrintContentDiv").innerHTML;   //获得需要打印的内容// alert(newstr);var oldstr = document.body.innerHTML;   //保存原先网页的代码document.body.innerHTML = newstr; //将网页内容更改成需要打印window.print();document.body.innerHTML = oldstr;   //将网页还原return false;}//打印页面预览function printpreview() {var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';document.getElementById("divButton").style.display = "none";//隐藏打印及其打印预览页面document.body.insertAdjacentHTML('beforeEnd', WebBrowser); //在body标签内加入html(WebBrowser activeX控件)WebBrowser1.ExecWB(7, 1); //打印预览}

WEB中前台JS控制打印PDF文件相关推荐

  1. vue-cli使用pdf.js插件浏览pdf文件,禁止下载打印复制粘贴。

    很多项目中都会有预览pdf文件,普通的可以直接使用a标签来实现该功能,但是此预览是浏览器自带的,有时候项目需求中会有禁止用户禁止下载和打印功能,浏览器自带的是无法满足的. 小编在网上找到pdf.js插 ...

  2. 【第六篇】Qt学习与使用---在qt中打印PDF文件(不是生成PDF)

    1.目的 如题,打印pdf文件中的内容. 2.思路 (1)思路1:可以通过Poppler类来读取pdf中的内容,并转化成图片,再 打印这些图片.这个方法的瑕疵是,需要在打印的时候准确的写出一页图片在A ...

  3. net中c#教程 如何创建、合并、下载、打印pdf文件?

    net中c#操作pdf文档,有很多插件可以使用,这里推荐其中的一个,名字叫iTextSharp,Nuget直接搜就可以找到.它能够创建与合并pdf文件.至于下载和打印pdf文件,则是通过其他方法完成的 ...

  4. 使用js直接下载pdf文件而不用在新的浏览器窗口打开

    最近接了一个需求,要求用户点击下载按钮后直接下载pdf文件,而不是打开一个新窗口,让用户再去手动保存. 接到需求后我立刻着手在网上查找文档,发现很多声称可以实现直接下载的方法都不行,只有下面这个方法成 ...

  5. java生成pdf_Java实现PDF文件生成并且打印pdf文件 demo

    ## Java实现PDF生成并且打印pdf文件(附demo) #### 目录: 0. 效果预览 1. 准备环境 2. Java如何调用打印机进行打印 3. Java如何生成pdf打印文件 4. 实现p ...

  6. 网页上打印PDF文件

    在网页上打印pdf文件,有两种方式:可以是在java后端通过调用iText PDF的jar包的方法实现PDF打印;也可以在前端调用lodop插件打印pdf文件. PDF文件的内容可以是表格,图片等等, ...

  7. PowerBuilder 10 下调用FoxitPDFSDK_AX_Pro.ocx浏览打印PDF文件

    在PowerBuilder中浏览.打印PDF文件,该代码已经在PB 10.5版本下测试可用. 使用的控件为FoxitPDFSDK_AX_Pro.ocx,该控件无水印,亲测可用. 具体操作步骤如下: 1 ...

  8. 【项目管理】Java使用pdfbox调用打印机打印PDF文件

    [项目管理]Java使用pdfbox调用打印机打印PDF文件 1.项目前言 2.项目实现 3.关键代码 4.效果演示 5.问题处理 5.1 安装对应字体 5.2 修改对应代码 系统:Win10 Jav ...

  9. VBA PowerShell批量打印PDF文件

    循环打印Excel中的PDF文件 Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "Shell ...

  10. js读取服务器txt文件,ZK中使用JS读取客户端txt文件内容问题

    最近写一个需求时遇到一个问题,用户需要通过点击一个按钮直接读取他自己电脑上D盘的一个txt文件内容显示到页面,因为项目现在是用ZK写的.我对于ZK也是刚刚了解不就,很多都还不是很熟.起初我是想用io流 ...

最新文章

  1. 【组队学习】【29期】6. 动手学数据分析
  2. show controller e1
  3. Boost:转换sqrt的测试程序
  4. 因子分析——python
  5. java中的远程debug调试
  6. alter 弹出添加图片_解决PS保存JPG图片内存很大的方法(二)
  7. 2-15 复合类型概述
  8. 数据挖掘FPGrowth算法JAVA实现
  9. 递归算法经典实例python-Python实现经典递归算法
  10. 画法几何与工程制图2
  11. 利用Python切头去尾
  12. opengl_纹理过滤
  13. 【图书】前端工程化:体系设计与实践
  14. 葡,西两国发展史(大航海时代)启示
  15. 中心频率、带内波动、带外抑制、矩形系数,dB是什么意思?
  16. alm系统的使用流程_[ALM]一步一步搭建MS ALM环境 - 安装域服务器
  17. 读经典《C程序设计语言》(The C Programming Language)
  18. 四大浏览器删除浏览历史记录的快捷键
  19. FineReport 基础报表样式
  20. 梦网科技--手机短信验证码实现

热门文章

  1. 【HW2020漏洞回顾】深信服EDR两大漏洞(转载)
  2. Python打印九九乘法表
  3. 凯立德导航 版本号意义解读
  4. 快速下载网页全部图片的方法
  5. 数值分析实验四 最小二乘法曲线拟合
  6. 太阳能计算机屏幕是什么材质,电脑显示器表面是什么材质的 什么是液晶玻璃...
  7. 模板消息php 群发,微信公众号模板消息群发php代码示例
  8. 『软件工程5』详解软件项目管理之软件的度量
  9. 软件工程-软件结构图、层次图、层次方框图的关系
  10. MATLAB读取图像相关的一些操作