导航:首页 > 版本升级 > js打印远程文件pdf

js打印远程文件pdf

发布时间:2023-06-10 04:14:10

㈠ 如何在java中用javascript来打印pdf

纯Java的解决方案:
我们首先想到的自然就是JDK1.4提供的JPS(Java Printing Service)啦,不过,这东西虽然说支持的Flavor,但是,不管是个人实验还是网上他人的评论,好像根本就是useless,可能如果说你 的打印机Driver支持PDF的Flavor的话,JPS会检测到你的driver的这个特性,能够成功的打印PDF文档出来,但是,大部分情况下,这 种情形是不成立的,故此JPS死路一条啦!
让我们看看PDF的老家Adobe那里有没有什么法宝,我们发现一个Viewer Bean的组件,说是可以将PDF以Bean组件的方式潜入到Swing中,哇,太爽了,不过慢着,协议上说不提供任何支持,也不保证不出任何问题,管那 么些,试过再说,一实验才知道,靠,Exception频发,而且这个组件较为陈旧,还是扔一边吧!
还有一个PDFBox,Open Source的,不过对中文支持不好,而且好像开发进度也不是很好,没有发布一个正式的版本,基本上不能用于生产环境;
最后,求助于Commercial的产品吧,实验了一下ActiveTree的JPrint,感觉不错,完全可以胜任我们的需求而且恰到好处,不过授权费 很贵,Email问过之后的答复是2000USD的最低购买,呵呵,虽然日本人很有钱,但也心疼这个银子啊,所以最终也得作罢!(ActiveTree的 授权其实挺令我ft的,他其实在2003年的时候是可以免费使用的,但之后就变卦了,呵呵,当时记得我还给提过一些bug之类,算了,人家做出这个东西也 不容易)
其他商业产品也是价格不菲,所以,基本上纯Java的solution到这里就否决了,让我们看Java-Com的解决方案吧!

Java-Com 的解决方案:
在前一条路走不通之后,我痛定思痛,决定转向自己不熟悉的领域,ms的领地,我打算从Java中调用Com组件,由Com组件来帮助我们实现PDF的打印 工作,不够这条路也不是一帆风顺那!
我们知道,Acrobat Reader在发布的时候会随同发布一个支持浏览器的com组件用来manipulate他的这个PDF文档格式,所以,我们想要本地调用这个随同发布的 Com组件来实现PDF打印。虽然Version5,6,7的这个组件格式不一样(5,6是以ocx的格式发布,7是以dll的格式发布),但是,不管那 么些,先从7开始吧!
要调用com,那么我们需要一个从java到com的Bridge,所以,jacob第一个跃入我的脑海,因为之前就用过嘛!但是麻烦来了,我们并不知道 这个com组件提供了那些调用接口啊!哎,没办法,回学校求教熟悉.net的同学,给好不容易弄出几个需要的调用方法(哎,可怜我的周末啊),星期一就回 来用jacob调用啦,可是左试右试就是一直抛异常,我那个气啊!难道是jacob的为问题?!我就又找了jcom和jcom2等类似的产品,但jcom 全是日文文档,没有办法,而jcom2估计也是一个德行(我忘了为什么当初否决了这个),所以就决定试一试商业产品吧!
这方面的商业产品主要有J-Integra,JPanel(好像叫这个名字)以及一个叫JNIWrapper的产品(这个是一个人用用来演示在java中 使用Acrobat5打印PDF的时候提到的)。这些商业产品好的地方就是他可以根据某个你要调用的com组件为你自动生成相应的Proxy对象java 代码,这样你就可以直接调用你熟悉的java代码了。像jacob等开源项目,如果给出一个类似的code generation工具的话,就完全不逊于这些商业产品啦。鉴于商业产品的价格,我最终还是否决了这些(日本人其实也听抠门的)。
这样,Java-com也对这个问题没辙了。
不过,最后在我的解决方案中,我还是使用了Jacob,这是后话,暂且不提...

那我们考虑一下,如果PDF打印不行,打印其他格式行不行?!比如图片,这个JPS可以完全打印,所以,我们找一下有没有将PDF格式转换为其他格式的工 具吧!

PDF格式转换的解决方案:
在这个领域,主要的就是有GhostScript/GView和ImageMagick,前者可以将PDF格式转换为PostScript格式,但是好像 GhostScript也不能用JPS完全打印出来;而后者是一个将PDF转换为Image的API工具,他的Java实现叫JMagick,但他有一个 跟GhostScript同样的问题,就是要转换,就必须在本地安装,然后通过命令行的方式调用,这个显然也不是很好,而且集成性很差,还是作罢!

剩下的一个是命令行调用啦,这是从itext网站找到的,你可以通过在命令行运行AcroRd32 /p /h "path to PDF file"这样的命令来打印你要打印的PDF文件,当然,你可以在PDF文件生成后就将他们依次放入一个批处理文件来执行这些打印命令,但是这个方案唯一 的问题就是,每打印一个文件都会启动一个Acrobat Reader窗口而且必须手动关闭,这现在不能满足目前的系统要求。
好了,所有的方案基本上都罗列完了,也没有找到一个可行的方案:-(
(没有银子嘛,不然Activetree的JPrint不错的说)

这些东西差不多郁闷了我3,4天吧,那几天简直就是bored to death.

不过,在郁闷的这几天的结尾,却有一道灵光闪过我的脑海...
能不能说启动一个打印service,当文档要打印的时候,直接发送给它就行了那?!而恰好我发现一段在网页中加载PDF文档的Javascript代 码,而且完全可以使用js来控制PDF的打印,所以,最终的这个方案就浮出水面了 ...
1-使用jacob启动一个IE进程,并隐藏IE窗口;
if(ieAutomation == null)
ieAutomation = new ActiveXComponent("InternetExplorer.Application");
ieAutomation.setProperty("Visible",new Variant(false));
2-PDF前端在生成PDF文件之后发送生成后的文件到JacobPDFPrinter,JacobPDFPrinter根据出入的PDF文件的全路径使 用Velocity模板引擎动态生成一个包含使用Javascript代码实现的PDF打印逻辑的HTML文档(当然,使用Velocity生成文档这部 分逻辑我们单独抽出到VeloIEPrinterGenerator类中);
3-在HTML生成之后,在JacobPDFPrinter中就可以使用jacob调用IE的Navigate2,将IE重定向到刚才生成的这个HTML 文件啦,这样,IE就会在后台调用JS代码将PDF打印到默认打印机;
4-打印成功之后,清除临时动态生成的HTML文件;
5-当主程序退出之前,Quit后台IE进程。
以上就是我能给出的一个solution,并不完美,但it works.
需要注意的几个问题是:
(1)需要设置IE的一个高级选项,运行本地脚本运行;
(2)因为Java和Com线程模型的不一致,导致在最终Quit后台IE进程的时候会抛出Com调用异常,因为对于Win平台API以及相关编程模型不 是很熟悉,所以,这个问题需要求助于别人帮忙解决;
(3)IE在执行JS打印PDF的时候,同样会后台启动Acrobat的一个进程,而这个进程我们程序中无法控制其生命周期,所以,主程序退出后,我们没 有办法同时kill这个进程,好在不管我们运行多少次,这个进程在后台只有一个,所以,性能负担不是很大;
转载

㈡ javascript 打印网页成pdf文件

通过javascript实现PDF自动打印(2009-05-08 15:06:05)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string pdffile = createpdf(false);
iframe1.Attributes.Add("src", pdffile);
}

}
private string createpdf(bool print)
{
try
{
string filename = "Chap0106.pdf";
iTextSharp.text.Document doc = new iTextSharp.text.Document();
PdfWriter writer = iTextSharp.text.pdf.PdfWriter.getInstance(doc, new FileStream(Server.MapPath(filename), FileMode.OpenOrCreate));
doc.Open();
doc.Add(new Paragraph(6, "abcd"));
writer.setViewerPreferences(PdfWriter.HideMenubar | PdfWriter.HideToolbar);
if (print)
{
PdfAction.javaScript("myOnMessage();", writer);
writer.addJavaScript("this.print(true);function myOnMessage(aMessage) {app.alert('Test',2);} var msgHandlerObject = new Object();doc.onWillPrint = myOnMessage;this.hostContainer.messageHandler = msgHandlerObject;");
}
doc.Close();
return filename;
}
catch
{
return "";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string pdffile = createpdf(true);
iframe1.Attributes.Add("src", pdffile);
}

如题:
<body>
<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" name="PDF1" width="760" height="633" border="0">
<param name="SRC" value="01.pdf"/>
</object>
<script language="JavaScript" type="text/javascript">
PDF1.SetShowToolbar(false);

</script>
</body>
在 pdf 文件里加上这样的属性就可以了

如何也通过类似“PDF1.SetShowToolbar(false); ”控制实现禁止对pdf内容的复制、以及打印!!!谢谢

javascript实现PDF自动打印

网页显示pdf文件,禁止保存和打印

1. 用网页打开 PDF文件。

2. 只可以浏览但是不许打印保存。

结果参照顶楼在jsf里实现如下代码:

//Get response
FacesContext faces = javax.faces.context.FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) faces.getExternalContext().getResponse();

//打开源pdf文件
PdfReader reader = new PdfReader("./HelloWorld.pdf");
Document document = new Document(reader.getPageSizeWithRotation(1));
int n = reader.getNumberOfPages();

ByteArrayOutputStream baos = new ByteArrayOutputStream();
//将原pdf文件中的内容放入字节流baos中
PdfCopy = new PdfCopy(document, baos);

//隐藏工具栏并给pdf加密
.setViewerPreferences(PdfWriter.HideMenubar | PdfWriter.HideToolbar);
.setEncryption(false, null, "pdf", PdfWriter.AllowAssembly);

//往pdf中写入内容
document.open();
for(int i = 1; i <= n; i++) {
PdfImportedPage page = .getImportedPage(reader, i);
.addPage(page);
}
document.close();

//设置响应类型并将pdf流写入响应
response.setContentType("application/pdf");
response.setContentLength(baos.size());
response.setHeader("Expires", "0");
response.setHeader("Cache-Control",
"must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
ServletOutputStream out = response.getOutputStream();
//将字节流baos中的内容写入响应流
baos.writeTo(out);
out.flush();

faces.responseComplete();
复制代码

以上代码的缺点:

1:加密只能实现打印和修改加密。

2:虽然隐藏了工具栏,但是可以通过快捷键F8来将工具栏显示出来

3:IE菜单栏中自带的保存功能也能将此pdf保存到本地

4:在客户端没有安装pdf阅读器的情况下,浏览器会直接提示用户是否下载,这也是和需求不符的。

最后经过不懈努力,找到了一个用<object></object>曲线救国的路线,哈哈,先来看看如下代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
</head>
<body>
<tr><td>
<p style="margin-top:-45px;margin-bottom:0px;">
<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" id="Pdf1" width="100%" height="100%">
<param name="_Version" value="327680">
<param name="_ExtentX" value="2646">
<param name="_ExtentY" value="1323">
<param name="_StockProps" value="0">
<param name="SRC" value="C:\temp.pdf">
</object>
</p>
</td></tr>
</body>
</html>
复制代码

其中sytle的是用一种比较bt的办法影藏了pdf顶部的工具栏(可以用第一种方法,这个方法作为备用)。

这样即使用ie菜单栏中的保存功能也只是保存网页布局而不会把pdf保存下来。

另外这样即使本地没装pdf阅读器也不会让你下载该pdf了,而只是在相应位置出现叉叉而已。基本能够满足客户的需求了

㈢ jsp 如何通过js来打印pdf文件!pdf存储在文件服务器上!

jsp中要利用java来实现打开,可以通过浏览器打开:
以下程序实现了读取某个路径下的pdf文件,并用浏览器打开:
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class PDFServlet extends HttpServlet {
private static final long serialVersionUID = -3065671125866266804L;
public PDFServlet() {
super();
}

public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/pdf");

FileInputStream in = new FileInputStream(new File("d:/1.pdf"));
OutputStream out = response.getOutputStream();
byte[] b = new byte[512];

while ((in.read(b)) != -1) {
out.write(b);
}

out.flush();
in.close();
out.close();
}

public void init() throws ServletException {
}
}

㈣ 如何将js代码导出成pdf

1,生成 PDF 这种事情通常由服务器端做
2,浏览器做的话要依赖于插件(ActiveX/Plugin,通常购买第三专方的)属
3,浏览器预览、打印倒是没问题(要装 PDF viewer,Firefox 自带的 PDF.js 扩展也可以)
4,总结,AngularJS 是浏览器端的,干不来这事儿,也不应该干这事儿,我想你最好换个方向

㈤ web如何实现客户端打印在线文件(pdf,word,excel等),同时可以控制打印设置

WEB软件打来印功能实现方式自:
1、浏览器本身的打印功能,效果最差。
2、在web服务器上产生好PDF或Excel文件,下载到本地打印。很多在服务器端运行的报表软件采用这样的方式。因为就是下载文件,所以各种浏览器都支持。缺点就用户操作麻烦,服务器附载大。
3、报表插件方式,可以做到与桌面软件一样的打印功能,这种方式实现的效果最好。缺点就是插件是针对特定浏览器的,不能做到支持各种浏览器,报表插件一般是支持IE浏览器。
综合考虑,看用哪种方式合适。

㈥ js将网页导出成pdf(js 打印指定div内容)2020-09-02

<input type="button"丛困  id="button" value="点击打印"/>

<div id="div_print">

<渗烂念p>打印此处内容</p>

</div>

<script type="text/javascript">

function printdiv(printpage){

  var newstr=document.getElementById(printpage).innerHTML;

  var oldstr=document.body.innerHTML;

  document.body.innerHTML=newstr;

  window.print();

  document.body.innerHTML=oldstr;

  return false;

}

window.onload=function(){

  var bt=document.getElementById("button");

  bt.onclick=function(){printdiv('div_print');}

}

</script>

html, body{

 overflow:visible;  

}

打印历弊时另存为pdf模式打印后的内容可复制 默认为Microsoft Print to PDF 模式

㈦ 假如我有一个PDF的路径,我如何通过JS将这个路径传进去,然后就直接去连接打印机进行打印

利用js新建弹窗,弹窗路径为pdf路径,在弹窗中使用打印方法。

㈧ js怎么调用printWithDialog来打印pdf

利用Adobe PDF Reader 控件,在Winform中实现打印PDF文档。 实现方法如下: (1)前提条件 必须事先在计算机安装Adobe Reader软件。Adobe Reader是免费软件,可以从Adobe官网下载安装 (2)在Visual Studio中新建一个“Windows 窗体应用程序”项目...

阅读全文

与js打印远程文件pdf相关的资料

热点内容
excel表格文件化乱码 浏览:986
win7无法打开隐藏文件 浏览:757
怎样把压缩文件变成空白文件 浏览:516
wokrNC和UG编程哪个好 浏览:487
爱奇艺随刻文件名 浏览:40
wps是怎么压缩文件 浏览:986
dos配置文件名 浏览:582
java软件工程师做什么 浏览:897
3dmax导出ive文件 浏览:464
数据重复性好是什么意思 浏览:166
如何查找电脑文件使用历史记录 浏览:821
linux可以运行exe的文件吗 浏览:935
库币是哪个国家的app 浏览:201
大智慧internet文件夹有哪些文件 浏览:89
编程培训课程哪个排名好 浏览:124
我的cad怎么没显示文件选项卡 浏览:952
命令行当前是哪个数据库 浏览:588
为什么appstore打开空白 浏览:574
选货车软件什么app最好 浏览:577
psv仙境传说ace如何降级版本 浏览:460

友情链接