10 个解决方案
#1
没人知道么?
#3
你这个也是先在磁盘有图片然后去读取的,我现在需要产生图片不在磁盘产生记录直接传至生成的EXCEL然后打印出来。
#4
那你的图片存在哪里???
#5
poi就可以
#6
如果不能直接传过去我想看看能不能放缓存里面,总之觉得生成到服务器,然后打印完EXCEL之后又得删掉太麻烦了
#7
POI是处理EXCEL的,但是我现在的关键是要如何生成图片不在本地产生记录直接传入EXCEL打印
#8
如果你的图片是固定的空调将它放在你的项目目录中然后通过
request.getSession().getServletContext().getRealPath("")+"/image/image.png"
#9
我想你还没理解我的意思。我的图片是用java生成的条形码,现在需要直接传到EXCEL里面导出进行打印。所以该图片是没有固定空间的,打印完之后也没有存在的必要了。所以该图片从生成到销毁整个过程存在不会超过5秒。
#10
public static void main(String[] args) {
FileOutputStream fileOut = null;
try {
// 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
ImageIO.write(Test.createImage(), "jpg", byteArrayOut);
// 创建一个工作薄
HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream("d:/test.xls"));
HSSFSheet sheet1 = wb.getSheetAt(0);
HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
//HSSFClientAnchor几个数字解释:3:是x轴的开始节点, 0: 是y轴的开始节点,1023:是x轴的结束节点,255:是y轴的结束节点,1:是从Excel的2列开始插入图片,10:是从excel的第11行开始插入图片, 11:图片占用11列的位置,25:图片结束在excel的26行
HSSFClientAnchor anchor = new HSSFClientAnchor(3, 0, 1023, 255,(short) 1, 10,(short) 11, 25);
anchor.setAnchorType(2);
// 插入图片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
fileOut = new FileOutputStream("d:/workbook.xls");
// 写入excel文件
wb.write(fileOut);
fileOut.close();
} catch (IOException io) {
io.printStackTrace();
System.out.println("io erorr : " + io.getMessage());
} finally {
if (fileOut != null) {
try {
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static BufferedImage createImage(){
int width = 100;
int height = 100;
String s = "你好";
Font font = new Font("Serif", Font.BOLD, 10);
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = (Graphics2D)bi.getGraphics();
g2.setBackground(Color.WHITE);
g2.clearRect(0, 0, width, height);
g2.setPaint(new Color(0,0,255));
g2.fillRect(0, 0, 100, 10);
g2.setPaint(new Color(253,2,0));
g2.fillRect(0, 10, 100, 10);
g2.setPaint(Color.red);
FontRenderContext context = g2.getFontRenderContext();
Rectangle2D bounds = font.getStringBounds(s, context);
double x = (width - bounds.getWidth()) / 2;
double y = (height - bounds.getHeight()) / 2;
double ascent = -bounds.getY();
double baseY = y + ascent;
g2.drawString(s, (int)x, (int)baseY);
return bi;
}
试试我这个行不
#1
没人知道么?
#2
#3
你这个也是先在磁盘有图片然后去读取的,我现在需要产生图片不在磁盘产生记录直接传至生成的EXCEL然后打印出来。
#4
那你的图片存在哪里???
#5
poi就可以
#6
如果不能直接传过去我想看看能不能放缓存里面,总之觉得生成到服务器,然后打印完EXCEL之后又得删掉太麻烦了
#7
POI是处理EXCEL的,但是我现在的关键是要如何生成图片不在本地产生记录直接传入EXCEL打印
#8
如果你的图片是固定的空调将它放在你的项目目录中然后通过
request.getSession().getServletContext().getRealPath("")+"/image/image.png"
#9
我想你还没理解我的意思。我的图片是用java生成的条形码,现在需要直接传到EXCEL里面导出进行打印。所以该图片是没有固定空间的,打印完之后也没有存在的必要了。所以该图片从生成到销毁整个过程存在不会超过5秒。
#10
public static void main(String[] args) {
FileOutputStream fileOut = null;
try {
// 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
ImageIO.write(Test.createImage(), "jpg", byteArrayOut);
// 创建一个工作薄
HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream("d:/test.xls"));
HSSFSheet sheet1 = wb.getSheetAt(0);
HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
//HSSFClientAnchor几个数字解释:3:是x轴的开始节点, 0: 是y轴的开始节点,1023:是x轴的结束节点,255:是y轴的结束节点,1:是从Excel的2列开始插入图片,10:是从excel的第11行开始插入图片, 11:图片占用11列的位置,25:图片结束在excel的26行
HSSFClientAnchor anchor = new HSSFClientAnchor(3, 0, 1023, 255,(short) 1, 10,(short) 11, 25);
anchor.setAnchorType(2);
// 插入图片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
fileOut = new FileOutputStream("d:/workbook.xls");
// 写入excel文件
wb.write(fileOut);
fileOut.close();
} catch (IOException io) {
io.printStackTrace();
System.out.println("io erorr : " + io.getMessage());
} finally {
if (fileOut != null) {
try {
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static BufferedImage createImage(){
int width = 100;
int height = 100;
String s = "你好";
Font font = new Font("Serif", Font.BOLD, 10);
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = (Graphics2D)bi.getGraphics();
g2.setBackground(Color.WHITE);
g2.clearRect(0, 0, width, height);
g2.setPaint(new Color(0,0,255));
g2.fillRect(0, 0, 100, 10);
g2.setPaint(new Color(253,2,0));
g2.fillRect(0, 10, 100, 10);
g2.setPaint(Color.red);
FontRenderContext context = g2.getFontRenderContext();
Rectangle2D bounds = font.getStringBounds(s, context);
double x = (width - bounds.getWidth()) / 2;
double y = (height - bounds.getHeight()) / 2;
double ascent = -bounds.getY();
double baseY = y + ascent;
g2.drawString(s, (int)x, (int)baseY);
return bi;
}
试试我这个行不