⑴ 想在jsp上顯示pdf,這么做,在線等
需要將pdf轉換成flash(swf)格式才可以。網路文庫上就是flash。上傳時同時傳兩份,一份原版,一份轉換後的flash文件。給我們顯示的是flash,下載時下的是原版文件。
⑵ jsp頁面如何導成pdf格式
先在伺服器上生成PDF文件,然後用戶通過點擊指向PDF文件的超鏈接選擇下載或打開。這是一個思路,或者說是思路之一。本文實現了這個思路,又給出另外一個思路並通過兩種途徑實現之。
1)直接在伺服器上生成PDF文件。
<%@ page import ="com.lowagie.text.*
,com.lowagie.text.pdf.*, java.io.*"%>
<%
String filename =
"PDF"+(new Random()).nextInt()+".pdf" ;
Document document =
new Document(PageSize.A4);
ServletOutputStream out1
= response.getOutputStream();
try{
PdfWriter writer =
PdfWriter.getInstance(document,
new FileOutputStream(filename) );
document.open();
document.add(new Paragraph("Hello World"));
document.close();
}
catch(Exception e){}
%>
上面的程序在伺服器上生成了一個靜態的PDF文件。顯然,每次運行所得的PDF文件的名稱應該是獨一無二不能有重的。本程序通過隨機函數來命名生成的PDF文件。本程序的缺點就是,每次運行都會在伺服器上產生一個PDF文件,如果不及時刪除,數量會越來越大,這顯然是站點維護者所不願意看到的。
2)將PDF文件通過流的形式輸送到客戶端的緩存。這樣做的好處是不會在伺服器上留下任何「遺跡」。
i)直接通過JSP頁面生成
<%@
page import="java.io.*,
java.awt.Color,com.lowagie.text.*,
com.lowagie.text.pdf.*"%>
<%
response.setContentType
( "application/pdf" );
Document document = new Document();
ByteArrayOutputStream buffer
= new ByteArrayOutputStream();
PdfWriter writer=
PdfWriter.getInstance( document, buffer );
document.open();
document.add(new Paragraph("Hello World"));
document.close();
DataOutput output =
new DataOutputStream
( response.getOutputStream() );
byte[] bytes = buffer.toByteArray();
response.setContentLength(bytes.length);
for( int i = 0;
i < bytes.length;
i++ )
{
output.writeByte( bytes[i] );
}
%>
ii)通過Servlet生成
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;
public void doGet
(HttpServletRequest request,
HttpServletResponse response)
throws IOException,ServletException
{
Document document =
new Document(PageSize.A4, 36,36,36,36);
ByteArrayOutputStream ba
= new ByteArrayOutputStream();
try
{
PdfWriter writer =
PdfWriter.getInstance(document, ba);
document.open();
document.add(new
Paragraph("Hello World"));
}
catch(DocumentException de)
{
de.printStackTrace();
System.err.println
("A Document error:" +de.getMessage());
}
document.close();
response.setContentType
("application/pdf");
response.setContentLength(ba.size());
ServletOutputStream out
= response.getOutputStream();
ba.writeTo(out);
out.flush();
}
⑶ 如何將文件pdf讀出到jsp頁面
在不需要使用插件,直接打開通過鏈接方式打開
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<%@ page language="java" import="java.util.*,java.io.*"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
</head>
<%
out.clear();
out = pageContext.pushBody();
response.setContentType("application/pdf");
try {
String strPdfPath = new String("D://200701010001.PDF");
//判斷該路徑下的文件是否存在
File file = new File(strPdfPath);
if (file.exists()) {
DataOutputStream temps = new DataOutputStream(response
.getOutputStream());
DataInputStream in = new DataInputStream(
new FileInputStream(strPdfPath));
byte[] b = new byte[2048];
while ((in.read(b)) != -1) {
temps.write(b);
temps.flush();
}
in.close();
temps.close();
} else {
out.print(strPdfPath + " 文件不存在!");
}
} catch (Exception e) {
out.println(e.getMessage());
}
%>
<body>
</body>
</html>
如果訪問者的計算機上沒有裝acrobat reader,直接用iframe或者直接用鏈接打開,那就不是打開文檔,而是直接下載了,為了防止下載,想像到媒體文件的播放方式,加上一些官方的docs,考慮用用object標簽使用pdf插件嵌入ie中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<META http-equiv="Content-Style-Type" content="text/css">
<META http-equiv="Content-Script-Type" content="text/javascript">
<TITLE>Checking if Acrobat Reader installed (IE4+)...</TITLE>
<SCRIPT for="window" event="onload"
<!--
document.all [
document.all.PDFNotKnown ? "IfNoAcrobat" : "IfAcrobat"
] .style.display = "block";
//--></SCRIPT>
</HEAD>
<BODY>
<NOSCRIPT>
Cannot determine if you have Acrobat Reader (or the full Acrobat)
installed <FONT size="-1">(because JavaScript is unavailable or
turned off)</FONT>.
</NOSCRIPT>
<DIV id="IfNoAcrobat" style="display:none">
<a href="http://get.adobe.com/cn/reader/">你需要先安裝Adobe Reader才能正常瀏覽文件,請點擊這里下載Adobe Reader.</a>
</DIV>
<OBJECT type="application/pdf" width=0 height=0 style="display:none">
<DIV id="PDFNotKnown" style="display:none"> </DIV>
</OBJECT>
<DIV id=showdiv
style="Z-INDEX: 0; LEFT:10px; WIDTH: 990px; POSITION: absolute; TOP: -8px; HEIGHT: 10px">
<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="990" height="700" border="0" top="-10" name="pdf">
<param name="toolbar" value="false">
<param name="_Version" value="65539">
<param name="_ExtentX" value="20108">
<param name="_ExtentY" value="10866">
<param name="_StockProps" value="0">
<param name="SRC" value="MXL.pdf">
</object>
</DIV>
</BODY>
</HTML>
在網頁中直接顯示pdf格式的文件方便閱讀。但是如果文件較大載入速度會很慢,另外如果客戶端沒有安裝pdf閱讀插件的話,也就看不了了,不過還是貼出來了,各取所需嗎。(1.pdf要改成自己的pdf文件路徑插入到頁面文件中)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
Html代碼
<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">
<param name="_Version" value="65539">
<param name="_ExtentX" value="20108">
<param name="_ExtentY" value="10866">
<param name="_StockProps" value="0">
<param name="SRC" value="1.pdf">
</object>
<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">
<param name="_Version" value="65539">
<param name="_ExtentX" value="20108">
<param name="_ExtentY" value="10866">
<param name="_StockProps" value="0">
<param name="SRC" value="1.pdf">
</object>
標准瀏覽器中:
Java代碼
<object data="1.pdf" type="application/pdf" width="300" height="200">
alt : <a href="1.pdf">test.pdf</a>
</object>
<object data="1.pdf" type="application/pdf" width="300" height="200">
alt : <a href="1.pdf">test.pdf</a>
</object>
IE7.0以上版本的瀏覽器中可用如下方法,低版本的IE會顯示兩個Object區域
Java代碼
<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">
<param name="_Version" value="65539">
<param name="_ExtentX" value="20108">
<param name="_ExtentY" value="10866">
<param name="_StockProps" value="0">
<param name="SRC" value="1.pdf">
<object data="1.pdf" type="application/pdf" width="300" height="200">
alt : <a href="1.pdf">test.pdf</a>
</object>
</object>
<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">
<param name="_Version" value="65539">
<param name="_ExtentX" value="20108">
<param name="_ExtentY" value="10866">
<param name="_StockProps" value="0">
<param name="SRC" value="1.pdf">
<object data="1.pdf" type="application/pdf" width="300" height="200">
alt : <a href="1.pdf">test.pdf</a>
</object>
</object>
低版本瀏覽器中的處理方法1:
Java代碼
<!--[if IE]>
<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">
<param name="_Version" value="65539">
<param name="_ExtentX" value="20108">
<param name="_ExtentY" value="10866">
<param name="_StockProps" value="0">
<param name="SRC" value="1.pdf">
</object>
<![endif]-->
<!--[if !IE]> <!-->
<object data="1.pdf" type="application/pdf" width="800" height="1050">
alt : <a href='http://get.adobe.com/cn/reader'>Adobe Reader.pdf</a>
</object>
<!--<![endif]-->
<!--[if IE]>
<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">
<param name="_Version" value="65539">
<param name="_ExtentX" value="20108">
<param name="_ExtentY" value="10866">
<param name="_StockProps" value="0">
<param name="SRC" value="1.pdf">
</object>
<![endif]-->
<!--[if !IE]> <!-->
<object data="1.pdf" type="application/pdf" width="800" height="1050">
alt : <a href='http://get.adobe.com/cn/reader'>Adobe Reader.pdf</a>
</object>
<!--<![endif]-->
低版本瀏覽器中的處理方法2:通過CSS控制顯示隱藏
Html代碼
/* hides the second object from all versions of IE */
* html object.hiddenObjectForIE { display: none; }
/* display the second object only for IE5 Mac */
/* IE Mac /*//*/
* html object.hiddenObjectForIE { display: inline; }
/**/
/* hides the second object from all versions of IE */
* html object.hiddenObjectForIE { display: none; }
/* display the second object only for IE5 Mac */
/* IE Mac /*//*/
* html object.hiddenObjectForIE { display: inline; }
/**/
Html代碼
<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="1050" border="0">
<param name="_Version" value="65539">
<param name="_ExtentX" value="20108">
<param name="_ExtentY" value="10866">
<param name="_StockProps" value="0">
<param name="SRC" value="1.pdf">
<object data="1.pdf" type="application/pdf" width="300" height="200" class="hiddenObjectForIE">
alt : <a href="1.pdf">test.pdf</a>
</object>
</object>
⑷ 讀取pdf文檔的內容 並在jsp頁面上顯示
java是不能直接讀取的,不過有組件可以實現,具體的例子你看這個,有doc、excel、pdf的 http://hi..com/zzcc_8/blog/item/79283d885585059da5c27256.html
⑸ 如何在jsp中直接打開本地硬碟上的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 {
}
}
⑹ 怎麼樣把一個復雜jsp頁面轉換成pdf
最簡單而且實用的使用虛擬列印機pdf factory即可,可以把任意只要能夠列印的格式文件都可以做成PDF文件,並且可以把多個文件通過列印之後合成一個PDF文件。
pdfFactory Pro(虛擬列印機)是一個無須 Acrobat 創建 Adobe PDF 文件的列印機驅動程序。pdfFactory Pro(虛擬列印機)提供的創建 PDF 文件的方法比其他方法更方便和高效。 功能包括: 多個文檔整合到一個 PDF 文件中; 內嵌字體; 通過 E-mail 發送; 預覽; 自動壓縮優化。
PDF Factory是pdf虛擬列印機軟體,下載安裝好PDF Factory後,我們在列印機控制面板中就可以找到一台由pdf Factory虛擬出來的列印機,可以把任何可以列印的文件轉換成pdf文件。用任何可以支持列印輸出的軟體,把需要處理的文件逐個列印到這個虛擬列印機,全部列印完成後可把結果保存成一個pdf文件。甚至可以把不同軟體格式的文件,如word、excel、photoshop等任何可以支持列印的文件,列印到同一個pdf文件。
在列印之前,在PDF Factory Pro裡面設置一下PDF的打開、列印等許可權即可實現加密等目的;
在列印之前,在設置裡面,就把載入所有的系統字體選中。
在列印界面出來後,可以在左側設置水印。然後再保存PDF文件。
列印完畢後,下載一個Adobe Reader,然後安裝,可以很流暢的閱讀PDF文件。
⑺ 樓主,請問下,你那個jsp轉換pdf是怎麼實現的 我現在也遇到這個問題,希望能指教下!
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.ArrayList;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.html.simpleparser.HTMLWorker;
import com.lowagie.text.html.simpleparser.StyleSheet;
import com.lowagie.text.pdf.PdfWriter;
public class MainClass {
public static void main(String[] args) throws Exception {
Document document = new Document();
StyleSheet st = new StyleSheet();
st.loadTagStyle("body", "leading", "16,0");
PdfWriter.getInstance(document, new FileOutputStream("html2.pdf"));
document.open();
ArrayList p = HTMLWorker.parseToList(new FileReader("example.html"), st);
for (int k = 0; k < p.size(); ++k)
document.add((Element) p.get(k));
document.close();
}
}
⑻ jsp打開PDF
在jsp中打開pdf的實現原理是在頁面上輸出adobe reader對象。
<OBJECT type="application/pdf" width=0 height=0 style="display:none">
<DIV id="PDFNotKnown" style="display:none"> </DIV>
</OBJECT>
如果沒有安裝就要提示:
<DIV id="IfNoAcrobat" style="display:none">
你需要先安裝Adobe Reader才能正常瀏覽文件,請點擊<a href=http://get.adobe.com/cn/reader/download/?installer=Reader_11.0_Chinese_Simplified_for_Windowstarget="_blank">這里</a>下載Adobe Reader.
</DIV>