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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp 如何通过js来打印pdf文件!pdf存储在文件服务器上!相关的知识,希望对你有一定的参考价值。

如题,如何通过js来打印pdf文件!pdf存储在文件服务器上!要做到一键打印!兼容主流浏览器!
有专业人士来能说出来方法的,100金币,现充!别拿百度搜的来应付,能搜的我都搜过了!
我没有悬赏金币,能帮我解决问题的可留下某宝账号,50大洋!!!君子协议

参考技术A 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

追问

我需要的是jsp页面当中一键打印,服务器不管是加载pdf,还是下载打印pdf我都有实现方法!但都不是我想要的,服务器打印只能是调用服务端的打印机,调不到客户端的打印机!

javascript 打印网页成pdf文件

就是将jsp页面打印成pdf文件
有源码的更好
谢谢

参考技术A 通过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 copy = new PdfCopy(document, baos);

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

//往pdf中写入内容
document.open();
for(int i = 1; i <= n; i++)
PdfImportedPage page = copy.getImportedPage(reader, i);
copy.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存储在文件服务器上!的主要内容,如果未能解决你的问题,请参考以下文章

javascript 打印网页成pdf文件

如何将html文件转成pdf 在线转换

在 Android 按钮上打印 Pdf 文件 单击

网页打印怎么转成pdf

怎么将html转换为pdf

jsp打开PDF