在跳转到jsp页面的时候,能不能异步把jsp页面转存为word到指定文件下?我这是一个合同签署
的项目,需要这么一个流程,。。。
没听过jsp装word的,jsp是动态的,只有html转word。你可以先把jsp转html 再转word
是html转,是我说明错了
你百度搜索poi 这个能html转word
package com.ist.util;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.model.TextRun;
import org.apache.poi.hslf.usermodel.RichTextRun;
import org.apache.poi.hslf.usermodel.SlideShow;
import java.io.InputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.xmlbeans.XmlException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextFont;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph;
import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape;
import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide;
public class PptToImgUtil {
/**
* 将ppt文件转换成图片,因为英文字体格式会乱码所有让英文格式的字体换为宋体
* @param fileUrl ppt文件路径
* @param ppt图片文件保存目录
* @throws Exception
*/
public static void toImg(String fileUrl,String fileOutUrl){
FileInputStream is;
try {
is = new FileInputStream(fileUrl);
String[] fileUrls = fileUrl.split("\\\\");
String fileName = fileUrls[0];
fileName = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
toImg(is, fileName, fileOutUrl);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void toImg(InputStream is,String fileName,String fileOutUrl){
try {
SlideShow ppt = new SlideShow(is);
is.close();
Dimension pgsize = ppt.getPageSize();
Slide[] slide = ppt.getSlides();
for (int i = 0; i < slide.length; i++) {
TextRun[] truns = slide[i].getTextRuns();
for ( int k=0;k<truns.length;k++){
RichTextRun[] rtruns = truns[k].getRichTextRuns();
for(int l=0;l<rtruns.length;l++){
int index = rtruns[l].getFontIndex();
String name = rtruns[l].getFontName();
rtruns[l].setFontIndex(index);
if(isContainsChinese(name)){
rtruns[l].setFontName(name);
}else{
rtruns[l].setFontName("宋体");
}
}
}
BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = img.createGraphics();
// clear the drawing area
graphics.setPaint(Color.white);
graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
// render
slide[i].draw(graphics);
// save the output
FileOutputStream out;
out = new FileOutputStream(fileOutUrl+"/"+fileName + (i + 1) + ".jpg");
javax.imageio.ImageIO.write(img, "jpg", out);
out.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//是否包含中文
public static boolean isContainsChinese(String str)
{
String regEx = "[\u4e00-\u9fa5]";
Pattern pat = Pattern.compile(regEx);
Matcher matcher = pat.matcher(str);
boolean flg = false;
if (matcher.find()) {
flg = true;
}
return flg;
}
/**
* 将pptx格式的文件转换成图片
* @param fileUrl ppt文件路径
* @param ppt图片文件保存目录
* @throws XmlException
*/
public static void toImgPptx(String fileUrl,String fileOutUrl){
FileInputStream is;
try {
is = new FileInputStream(fileUrl);
String[] fileUrls = fileUrl.split("\\\\");
String fileName = fileUrls[0];
fileName = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
toImgPptx(is, fileName, fileOutUrl);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void toImgPptx(InputStream is,String fileName,String fileOutUrl){
try {
XMLSlideShow xmlSlideShow = new XMLSlideShow(is);
Dimension pgsize = xmlSlideShow.getPageSize();
XSLFSlide[] slides = xmlSlideShow.getSlides();
for (int i = 0; i < slides.length; i++) {
//设置字体样式,解决中文乱码问题
CTSlide rawSlide=slides[i].getXmlObject();
CTGroupShape gs = rawSlide.getCSld().getSpTree();
CTShape[] shapes = gs.getSpArray();
for (CTShape shape : shapes) {
CTTextBody tb = shape.getTxBody();
if (null == tb)
continue;
CTTextParagraph[] paras = tb.getPArray();
//宋体样式xml字符串
CTTextFont font=CTTextFont.Factory.parse(
"<xml-fragment xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">"+
"<a:rPr lang=\"zh-CN\" altLang=\"en-US\" dirty=\"0\" smtClean=\"0\"> "+
"<a:latin typeface=\"+mj-ea\"/> "+
"</a:rPr>"+
"</xml-fragment>");
for (CTTextParagraph textParagraph : paras) {
CTRegularTextRun[] textRuns = textParagraph.getRArray();
for (CTRegularTextRun textRun : textRuns) {
CTTextCharacterProperties properties=textRun.getRPr();
CTTextFont fontll = properties.getLatin();
if(null== fontll){//字体样式为空则设为宋体,否则会乱码
properties.setLatin(font);
}else{//字体样式不为空则
properties.setLatin(fontll);
}
}
}
}
BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = img.createGraphics();
// clear the drawing area
graphics.setPaint(Color.white);
graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
// render
slides[i].draw(graphics);
File outFilefolder = new File(fileOutUrl);
if(!outFilefolder.exists()){
outFilefolder.mkdirs();
}
// save the output
FileOutputStream out = new FileOutputStream(fileOutUrl+"/"+fileName + (i + 1) + ".jpg");
javax.imageio.ImageIO.write(img, "jpg", out);
out.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
PptToImgUtil.toImg("D:\\素材\\演示ppt.ppt","D:\\素材");
PptToImgUtil.toImgPptx("D:\\素材\\演示ppt.pptx","D:\\素材");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}