Ext怎么导出pdf

要详细点的

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