要详细点的
JAVA导出PDF实例
http://quicker.iteye.com/blog/548805
[code="java"]
一、直接导出成PDF
Java代码
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
public class ItextProduce {
public static void main(String[] args) {
Document doc = null;
try {
doc = new Document();
PdfWriter.getInstance(doc, new FileOutputStream("C:\\itext.pdf"));
doc.open();
doc.add(new Paragraph("Hello World"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} finally {
doc.close();
}
}
}
二、由Servlet导出PDF
Java代码
package com.lwf.eus.servlet;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
public class ListRocarsReportServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ListRocarsReportServlet() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Document doc = new Document();
ByteArrayOutputStream ba = new ByteArrayOutputStream();
try {
PdfWriter writer = PdfWriter.getInstance(doc, ba);
doc.open();
doc.add(new Paragraph("Hello World"));
} catch (DocumentException e) {
e.printStackTrace();
}
doc.close();
response.setContentType("application/pdf");
response.setContentLength(ba.size());
ServletOutputStream out = response.getOutputStream();
ba.writeTo(out);
out.flush();
}
}
三、由JSP导出成PDF
Java代码
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page
import="java.io.ByteArrayOutputStream,
com.itextpdf.text.Document,
java.io.DataOutput,java.io.DataOutputStream,
com.itextpdf.text.Paragraph,
com.itextpdf.text.DocumentException,
com.itextpdf.text.Document.*,
com.itextpdf.text.pdf.*"%>
<%
response.setContentType("application/pdf");
Document doc = new Document();
ByteArrayOutputStream ba = new ByteArrayOutputStream();
PdfWriter writer = PdfWriter.getInstance(doc, ba);
doc.open();
doc.add(new Paragraph("Hello World"));
doc.close();
DataOutput output = new DataOutputStream(response.getOutputStream());
byte[] bytes = ba.toByteArray();
response.setContentLength(bytes.length);
for (int i = 0; i < bytes.length; i++) {
output.writeByte(bytes[i]);
}
%>
[/code]
EXT本身不支持PDF导出吧,
而且我记得JAVASCRIPT也不能控制导出PDF,就算是导出EXCEL,好像还是IE浏览器专有的吧,
再有就是要浏览器装插件。。。。
要想导出PDF,最好还是在服务器端做操作,如果用的是JAVA服务器端,可以考虑
POI,Jasper Report ,ITEXT等第三方包,具体用法可查看对应的DOC文档
你看到的差不多应该只是EXT的一个界面,提供一个按钮,点击时,EXT打开个遮罩层,发送命令到服务器,服务器生成PDF文件发回命令到页面下载的吧?
整个过程好像是EXT在导出PDF。。。
虽然不敢说对EXT多吗了解,但觉得对EXT是否提供导出PDF还是比较肯定地 :D :D :D :D :D
个人认为,等待下面的回答。
EXT能导出EXCEL 也不是EXT提供的,应该是第三方控件,
或者调用最简单的
[code="js"]
var oExcel = newActiveXObject("Excel.Application"); //创建Excel对象
var oWork =oExcel.Workbooks.Add(); //新建一个Excel工作簿
var oSheet =oWork.ActiveSheet; //指定要写入内容的工作表为活动工作表
var table =document.all.myTbl; //指定要写入的数据源的id
var myRow =table.rows.length; //取数据源行数
var myCell =table.rows(0).cells.length; //取数据源列数
for(i=0;i<myRow;i++){ //在Excel中写行
。。。。。
[/code]
该代码也只是IE特有的,用户还得装OFFICE。。。
再或者点击导出按钮时,提交到服务器,服务器生成EXCEL文件,
或者生成一个HTML ,在RESPONSE.HEADER里加EXCEL的MIME,
传到客户端时就是一个EXCEL文件了。。。
[code="js"]
text : '导出',
scope : this,
handler :function() {
alert("tewtwetwe");
var vExportContent = grid.getExcelXml();
if (Ext.isIE6 || Ext.isIE7 || Ext.isSafari || Ext.isSafari2 || Ext.isSafari3) {
var fd=Ext.get('frmDummy');
if (!fd) {
fd=Ext.DomHelper.append(Ext.getBody(),{tag:'form',method:'post',id:'frmDummy',action:'exportexcel.jsp', target:'_blank',name:'frmDummy',cls:'x-hidden',cn:[
{tag:'input',name:'exportContent',id:'exportContent',type:'hidden'}
]},true);
}
fd.child('#exportContent').set({value:vExportContent});
fd.dom.submit();
} else {
document.location = 'data:application/vnd.ms-excel;base64,'+Base64.encode(vExportContent) ;
//document.location = 'data:application/octet-stream;base64,'+Base64.encode(vExportContent);
}}}
[/code]
这个还是提交到服务器了
tag:'form',method:'post',id:'frmDummy',action:'exportexcel.jsp',
fd.dom.submit();
,只是写代码时用EXT封装了一下,看上去好像是EXT的东西,
其时最终的代码还是
至于为什么要
var fd=Ext.get('frmDummy');
if(!fd).....
可能得看具体业务。
而
document.location = 'data:application/vnd.ms-excel;base64,'+Base64.encode(vExportContent) ;
其实跟生成一个HTML ,在RESPONSE.HEADER里加EXCEL的MIME,
他只是告诉浏览器,我要打开的数据是EXCEL(而这种加data:协议的也只是特定浏览器才有的),看有没有关联的程序可以打开该文件而以,并不是EXT的功能。也不能说所有浏览器都能用
其实导出EXCEL功能在服务器端很好写的,找POI,或其他第三方包,再找个最简单的例子就可以写出可用的功能了,
http://bocolijun.iteye.com/blog/453104
我自己写的有个例子
[code="java"]
package com.suziwen;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CreationHelper;
public class Testpoi {
/**
* @param args
*/
public static void main(String[] args) {
//ExcelCss css = new ExcelCss("宋体", (short)9, HSSFFont.BOLDWEIGHT_NORMAL, false);
System.out.print("hahahahh");
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
HSSFFont font = hssfWorkbook.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 9);
font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
font.setItalic(false);
font.setStrikeout(false);
font.setUnderline(HSSFFont.U_NONE);
font.setColor(HSSFFont.COLOR_NORMAL);
HSSFCellStyle hssfStyle = hssfWorkbook.createCellStyle();
hssfStyle.setFont(font);
hssfStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
hssfStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
hssfStyle.setBorderTop((short) 1);
hssfStyle.setBorderRight((short) 1);
hssfStyle.setBorderBottom((short) 1);
hssfStyle.setBorderLeft((short) 1);
hssfStyle.setTopBorderColor(HSSFColor.BLACK.index);
hssfStyle.setRightBorderColor(HSSFColor.BLACK.index);
hssfStyle.setBottomBorderColor(HSSFColor.BLACK.index);
hssfStyle.setLeftBorderColor(HSSFColor.BLACK.index);
hssfStyle.setFillForegroundColor(HSSFColor.BLACK.index);
hssfStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
hssfStyle.setWrapText(true);
hssfStyle.setIndention((short)0);
HSSFSheet hssfSheet = hssfWorkbook.createSheet("suziwen1");
HSSFSheet hssfSheet1 = hssfWorkbook.createSheet("badsd");
/*for (int i = 1 ;i<=6 ; i ++){
hssfSheet.setColumnWidth(i, i*100+200);
}*/
HSSFRow hssfRow = hssfSheet.createRow(1);
hssfRow.setHeight((short) 900);
for(int i = 1 ; i<=6;i++){
HSSFCell hssfcell = hssfRow.createCell(i);
hssfcell.setCellValue("宋体yeahhhh"+i*6);
hssfcell.setCellStyle(hssfStyle);
}
HSSFCell _hssfCell = hssfRow.createCell(7);
//_hssfCell.setCellValue(new Date());
_hssfCell.setCellValue(Calendar.getInstance());
HSSFCellStyle _hssfStyle = hssfWorkbook.createCellStyle();
CreationHelper chelper = hssfWorkbook.getCreationHelper();
_hssfStyle.setDataFormat(chelper.createDataFormat().getFormat("m/d/yy h:mm"));
_hssfCell.setCellStyle(_hssfStyle);
for (int i = 1 ;i<=6 ; i ++){
hssfSheet.setColumnWidth(i, 6000);
}
try {
FileOutputStream fops = new FileOutputStream("testpoi.xls");
hssfWorkbook.write(fops);
fops.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
[/code]
在使用前需要引入POI包,我用的是POI-3.5-FINAL。JAR
我还有一个直接写好的WEB版导出例子,不过我这没法上传文件。。。
或者看看这个
http://quicker.iteye.com/blog/548803
三种导出方法比较:
http://www.iteye.com/topic/509417
Itext导出:
http://blog.csdn.net/lenotang/archive/2008/08/24/2823408.aspx
http://yongsky.iteye.com/blog/99406
http://lib.360doc.com/07/0601/15/11586_532763.shtml
http://moon-vv.iteye.com/blog/224725
POI导出excel
http://yongsky.iteye.com/blog/99075
http://blog.csdn.net/lenotang/archive/2008/08/24/2823230.aspx
使用JasperReport和iReport制件java报表
http://lib.360doc.com/07/0921/17/16915_760838.shtml
http://rappy.iteye.com/blog/149348
http://jasperforge.org/plugins/project/project_home.php?projectname=jasperreports