xml地图|网站地图|网站标签 [设为首页] [加入收藏]

智能硬件

当前位置:美高梅游戏网站 > 智能硬件 > java实现导出excel、word、 pdf

java实现导出excel、word、 pdf

来源:http://www.gd-chuangmei.com 作者:美高梅游戏网站 时间:2019-10-08 14:06

在有些需求当中我们需要抓取字段并且填充到excel表格里面,最后将excel表格转换成pdf格式进行输出,我第一次接触这个需求时,碰到几个比较棘手的问题,现在一一列出并且提供解决方案。

经过几天的学习终于可以实现java中将查询结果存储为Excel,将页面另存word,将html页面存为pdf格式这几个功能了,这是我的第一篇博客,为了共享代码,也为了以后自己的学习成果不会弄丢,现在将这几个功能贴在网上。 
一、将查询结果存为excel,我的毕业设计是超市信息管理系统,一个页面将商品信息展示出来了,现在将结果存为excel 
product.jsp页面 
<html> 
<title>this is my excel</title> 
<head> 
<script type="text/javascript"> 
function genExcel(){ 
美高梅游戏官网娱乐,    window.open("productManage/creatExcel.jsp"); 
美高梅棋牌,   } 
   function genWord(){ 
    window.open("productManage/creatWord.jsp"); 
   } 
   function genPdf(){ 
   window.open("productManage/creatPdf.jsp"); 
   } 
</script> 
</head> 
<body> 
<form> 
<input type="button" onclick="genExcel()" value="生成excel"> 
<input type="button" onclick="genWord()" value="生成word"> 
        <input type="button" onclick="genPdf()" value="生成pdf">  
</form> 
</body> 
</html> 
************************************************* 
//creatExcel.jsp 
<%@page import="com.bean.Productbean"%> 
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
<%@ page import="com.dao.*" %> 
<% 
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%> 

1:excel转pdf出现乱码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
  <head> 
    <base href="<%=basePath%>"> 
    
    <title>My JSP 'creatExcel.jsp' starting page</title> 
    
<meta http-equiv="pragma" content="no-cache"> 
<meta http-equiv="cache-control" content="no-cache"> 
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
<meta http-equiv="description" content="This is my page"> 
<!-- 
<link rel="stylesheet" type="text/css" href="styles.css"> 
--> 
<% 
    response.setHeader("Content-Disposition", "attachment;filename=product.xls"); 
    response.setContentType("application/vnd.ms-excel"); 
    CreatExcel ce = new CreatExcel(); 
    out.clear() ; 
    out = pageContext.pushBody(); 
    ce.getExcel("product.xls",response.getOutputStream()); 

    第一次excel转pdf是成功的,第二次开始后面皆是乱码,是因为我的pdf转excel方法出现的问题,解决办法是采用java自身底层的方法(详见下方代码)。

    
%> 
  </head> 
  
  <body> 

 public static boolean getLicense() {
        boolean result = false;
        try {
            InputStream is = Thread.currentThread().getContextClassLoader()
                    .getResourceAsStream("license.xml"); //  license.xml应放在..WebRootWEB-INFclasses路径下
            License aposeLic = new License();
            aposeLic.setLicense(is);
            result = true;
        } catch (Exception e) {               
            e.printStackTrace();
        }
        return result;
    }
    
    
    public static void excelTransferPdf(String excelPath,String pdfPath) {
        if (!getLicense()) {
            System.out.println("license faile");
            return;
        }
        
        try {     
            Workbook wb = new Workbook(excelPath);
            FileOutputStream fileOS = new FileOutputStream(new File(pdfPath));
            wb.save(fileOS, com.aspose.cells.SaveFormat.PDF);
            fileOS.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  </body> 
</html> 
************************************************* 
//CreatExcel.java 
package com.dao; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.util.ArrayList; 

2:excel转pdf出现折行。

import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFCellStyle; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 

  excel转pdf出现折行的情况非常常见,因为在程序运行过程中很多字段是抓取的,你无法判断你的excel转成pdf会有几页,所以这个时候你就不要随意设置excel的预览格式,将excel的单元格式设置自动换行。

import com.bean.Productbean; 

3:抓取字段显示结果不完整:。

public class CreatExcel { 
public void getExcel(String sheetname,OutputStream output){ 

  当你未设置单元格大小而又没有设置单元格自动换行,比如你的A18单元格里面的字段超过了单元格的长度你还没有设置单元格大小而又没有设置单元格自动换行,就将抓取的字段填充在B18单元格里面,那么打印出来的pdf文件A18单元格超出单元格外的内容是不予显示的,此时你要么将抓取字段填充在C18单元格内要么将更改A18单元格格式

int iPage = 1; 
    int iPageSize = 10000; 
    HSSFWorkbook wb = new HSSFWorkbook(); 
    HSSFSheet sheet1 = wb.createSheet("sheet1"); 
    HSSFCellStyle setBorder = wb.createCellStyle(); 
    //居中设置 
    setBorder.setAlignment(HSSFCellStyle.ALIGN_CENTER); 
    HSSFRow row = sheet1.createRow((short) 0); 
    //设置单元格的宽 
    sheet1.setColumnWidth(0, 10 * 256); 
    sheet1.setColumnWidth(1, 10 * 256); 
    sheet1.setColumnWidth(2, 10 * 256); 
    sheet1.setColumnWidth(3, 10 * 256); 
    sheet1.setColumnWidth(4, 10 * 256); 
    sheet1.setColumnWidth(5, 10 * 256); 
    sheet1.setColumnWidth(6, 10 * 256); 
    sheet1.setColumnWidth(7, 10 * 256); 
    sheet1.setColumnWidth(8, 10 * 256); 
    HSSFCell cell = row.createCell(0); 
    row.createCell(0).setCellValue("商品编号"); 
    row.createCell(1).setCellValue("商品名称"); 
    row.createCell(2).setCellValue("进价"); 
    row.createCell(3).setCellValue("出售"); 
    row.createCell(4).setCellValue("所属种类"); 
    row.createCell(5).setCellValue("单位"); 
    row.createCell(6).setCellValue("库存"); 
    row.createCell(7).setCellValue("产地"); 
    ProductDao pd = new ProductDao(); 
    ArrayList plist = pd.getAllPro(-1); 
    if(plist.size()>0){ 
    for(int i=0;i<plist.size()-1;i++){ 
    row = sheet1.createRow(i + 1); 
    row.createCell(0).setCellValue(((Productbean)(plist.get(i))).getPro_id()+""); 
    row.createCell(1).setCellValue(((Productbean)(plist.get(i))).getPro_name()+""); 
    row.createCell(2).setCellValue(((Productbean)(plist.get(i))).getC_price()+""); 
    row.createCell(3).setCellValue(((Productbean)(plist.get(i))).getPrice()+""); 
    row.createCell(4).setCellValue(((Productbean)(plist.get(i))).getPro_varid()+""); 
    row.createCell(5).setCellValue(((Productbean)(plist.get(i))).getPro_unit()+""); 
    row.createCell(6).setCellValue(((Productbean)(plist.get(i))).getPro_count()+""); 
    row.createCell(7).setCellValue(((Productbean)(plist.get(i))).getPro_field()+""); 
    
    
    } 
    } 
    
    try { 
output.flush(); 
wb.write(output); 
    output.close(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 

本文由美高梅游戏网站发布于智能硬件,转载请注明出处:java实现导出excel、word、 pdf

关键词:

上一篇:没有了

下一篇:没有了