java excel转换图片代码,Java Graphics - 如何将表格数据转换为PNG图像文件

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.File;

import javax.imageio.ImageIO;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JScrollPane;

import javax.swing.JTable;

public class Main {

public static void main(String[] args) throws Exception {

Object[][] data = {

{ "A", new Integer(3), new Double(7.23), new Boolean(true) },

{ "J", new Integer(2), new Double(4.64), new Boolean(false) },

{ "S", new Integer(1), new Double(8.81), new Boolean(true) } };

String[] columns = { "Col", "Col", "Col", "Col" };

JTable table = new JTable(data, columns);

JScrollPane scroll = new JScrollPane(table);

JFrame f = new JFrame();

f.setContentPane(scroll);

f.pack();

int x = (int) table.getTableHeader().getSize().getWidth();

int y = (int) table.getTableHeader().getSize().getHeight() + (int) table.getSize().getHeight();

BufferedImage bi = new BufferedImage((int) x, (int) y,

BufferedImage.TYPE_INT_RGB);

Graphics g = bi.createGraphics();

table.getTableHeader().paint(g);

g.translate(0, table.getTableHeader().getHeight());

table.paint(g);

g.dispose();

JOptionPane.showMessageDialog(null, new JLabel(new ImageIcon(bi)));

ImageIO.write(bi, "png", new File("c:/Java_Dev/table.png"));

System.exit(0);

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Java的开源库iText来实现生成带表格PNG图片。以下是一个简单的示例代码: ```java import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import com.itextpdf.awt.DefaultFontMapper; import com.itextpdf.awt.FontMapper; import com.itextpdf.awt.geom.Rectangle2D; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfTemplate; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.text.pdf.codec.PngEncoder; public class TableToPNG { public static void main(String[] args) throws IOException, DocumentException { int width = 500; int height = 300; int marginLeft = 50; int marginTop = 50; int cellPadding = 5; int borderWidth = 1; int fontSize = 12; List<String[]> data = new ArrayList<String[]>(); data.add(new String[] { "Name", "Age", "Gender" }); data.add(new String[] { "John", "25", "Male" }); data.add(new String[] { "Jane", "30", "Female" }); data.add(new String[] { "Bob", "40", "Male" }); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = image.createGraphics(); g2d.setPaint(Color.WHITE); g2d.fillRect(0, 0, width, height); PdfWriter writer = PdfWriter.getInstance(null, new FileOutputStream("temp.pdf")); writer.setStrictImageSequence(true); writer.open(); PdfContentByte cb = writer.getDirectContent(); PdfTemplate tp = cb.createTemplate(width, height); FontMapper fontMapper = new DefaultFontMapper(); BaseFont bf = BaseFont.createFont("Helvetica", BaseFont.WINANSI, BaseFont.EMBEDDED); fontMapper.putName("Helvetica", bf.getPostscriptFontName()); cb.setFontAndSize(bf, fontSize); int numCols = data.get(0).length; float[] colWidths = new float[numCols]; for (int i = 0; i < numCols; i++) { colWidths[i] = (width - 2 * marginLeft) / (float) numCols; } float yPos = height - marginTop - fontSize; for (String[] row : data) { float xPos = marginLeft; for (int i = 0; i < numCols; i++) { String cellText = row[i]; Rectangle2D cellBounds = bf.getStringBounds(cellText, g2d.getFontRenderContext()); float cellWidth = colWidths[i] - 2 * cellPadding - 2 * borderWidth; float cellHeight = (float) cellBounds.getHeight() + 2 * cellPadding + 2 * borderWidth; cb.roundRectangle(xPos, yPos - cellHeight, cellWidth, cellHeight, borderWidth); cb.stroke(); cb.beginText(); cb.showTextAligned(PdfContentByte.ALIGN_LEFT, cellText, xPos + cellPadding, yPos - cellPadding, 0); cb.endText(); xPos += colWidths[i]; } yPos -= fontSize + 2 * cellPadding + 2 * borderWidth; } tp.addImage(PngEncoder.encode(image)); cb.addTemplate(tp, 0, 0); writer.flush(); writer.close(); File pngFile = new File("table.png"); PngEncoder encoder = new PngEncoder(); encoder.encode(tp.createGraphics(width, height), pngFile); } } ``` 这个示例代码将生成一个带有表格PNG图片,并且保存为temp.pdf和table.png两个文件。你可以根据自己的需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值