java生成图片

msgyg 发布于 01/08 14:39
阅读 827
收藏 1

 

java根据数据生成这种样式的图片,求大神给个代码  万分感谢

加载中
1
tcxu
tcxu

根据 java 将画布内容保存到本地图片(简单画图板),并按照楼主的影像文档的尺寸,编写以下java 程序供参考、测试、改进。按按钮 "save",可生成影像文档 "1.jpg"。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.imageio.ImageIO;
import java.awt.image.*; 

 
class MyCan extends JPanel{
	private int width =916;
	private int height =402;
	private String [] field = {"序号","采购订单","合同金额","invoice No","invoice amount","billing time"};
	private String [] data = {"1","450043924","5,700.00","12345678","5,700.00","2019年10月24日"};
	String [] signatures = {"供应商编码________________","invoice auditing______________",
							"invoice checking_______________"};
		
	public MyCan(){
		super();
		this.setSize(width, height);
		this.setBounds(new Rectangle(0,0,920,370));
		this.setBackground(Color.WHITE);
		this.setVisible(true);
	}
	
	public void paint(Graphics graphics){
        super.paint(graphics);
        Graphics2D g2d = (Graphics2D)graphics;
        g2d.setBackground(Color.WHITE);
 
        g2d.setColor(Color.BLACK);
        g2d.setFont(new  Font("宋体",Font.BOLD,30));
      	g2d.drawString("盛世康禾有限公司Invoice Details", 251.0f,79.0f);
        g2d.setFont(new  Font("宋体",Font.BOLD,14));
        g2d.drawString("2019年10月9日",431,114);
        for (int i=0;i<4;i++)
        g2d.drawLine(33,133 + 30*i,861,133 + 30*i);
        
        for (int i=0;i<field.length;i++){
        	g2d.drawString(field[i],50 + i*138, 153 );
        	g2d.drawString(data[i],50 + i*138, 183 );
        }
        for (int i=0;i<signatures.length;i++)
        	g2d.drawString(signatures[i], 33 + 290*i, 253 );

        for (int i=0;i<7;i++)
        	g2d.drawLine(33 + 138*i,133, 33 + 138*i, 223 );
        g2d.dispose();
    }
}
 
public class Invoice_Particulars extends JFrame{
	private int width = 920;
	private int height = 450;
	private MyCan canvas = null;
	private JButton save=null;
	
	
	public static void main(String args[]){
		new Invoice_Particulars();
	}
	
	public Invoice_Particulars(){
		super();
		this.setTitle("表格");
		this.setSize(width, height);
		this.setResizable(false);
		this.setLocation(916, 402);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLayout(null);
		
		this.canvas = new MyCan();
		this.add(canvas);
		
		this.save = new JButton();
		this.save.setText("save");
		this.save.setBounds(40, 380, 80, 30);
		this.save.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					savePic();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
 
		});
		this.add(save);
		this.setVisible(true);
	}
		
	public String savePic() throws IOException{
		Dimension imagesize = this.canvas.getSize();
		BufferedImage image = new BufferedImage(imagesize.width,imagesize.height,BufferedImage.TYPE_INT_RGB);
		
		Graphics2D graphics = image.createGraphics();
                this.canvas.paint(graphics);
                graphics.dispose();
                Image newImage = image.getScaledInstance(920, 370, Image.SCALE_SMOOTH);
                BufferedImage myImage = new BufferedImage(920,370,BufferedImage.TYPE_INT_RGB);
                Graphics graphics1 = myImage.getGraphics();
                graphics1.drawImage(newImage, 0, 0, null);
                graphics1.dispose();//对图片调整大小
 
                File f=new File("1.jpg");
		if( !f.exists() ){
			f.createNewFile();
			System.out.println("从无到有");
		}
			
		ImageIO.write(myImage, "jpg",f);
		System.out.println("覆盖了旧文档 ");
		return null;
	}
}

 

msgyg
msgyg
回复 @tcxu : :+1:
tcxu
tcxu
回复 @msgyg : 与前端共同在服务器上约定好影像文档的路径和名称。 利用这个java代码,你在你这边,预先按约定的路径,约定的地点和名称,生成这个 .jpg 文件, 以便之后前端使用。不知这样是否可行?
msgyg
msgyg
回复 @tcxu : 您的方案十分的好,只是我的理解有点差。我们的项目是前后端分离的,我想问的是,我这边直接生成这样的图片但是是个流 直接传给前端,类似请求了一个.jpg文件地址一样,而且是A4的大小
tcxu
tcxu
回复 @msgyg : 用 html+js 也可以出示 invoice 的详情。如果用户打开这个页面,则可以按 "保存" 按钮,以影像文档的形式,下载这个 invoice 的详情。 详情见楼下我的回答。不知这个 html+js 案例,是否可以解决楼主的问题。
msgyg
msgyg
你的这个 实在是太棒了,能冒昧再问一下吗,在哪一步可以直接变成流传输给前台,因为我对这类需求就是个小白,求指教
0
小伯恩
小伯恩

你这个思路不是很好,建议word,然后转p'd'f

0
kananc
kananc

直接生成pdf,再转图片

0
码农小胖哥
码农小胖哥

java 自带的 awt 库 生成  前提你自己做个模板 然后动态的把数据写进去 调整一下就好了 希望被采纳

0
小白_我们什么时候才能快乐啊
小白_我们什么时候才能快乐啊

之前还想着可以生成一个股票的趋势图来着

0
wad12302
wad12302

生成pdf 然后 由pdf 转图片

0
f
freezingsky

如果只是这样的模板 , 就直接graphic画图吧. 如果总是变动 或者是其他,就考虑用PDF之类的文档式操作吧.

0
yejg1212
yejg1212

可以用freemarker设置模板,样式格式都方便调整。

填充数据后,转html,再转图片即可

0
Kit_lee
Kit_lee

jasperreport,拿走不谢

返回顶部
顶部