Java API или инструмент для преобразования табличных данных в файл изображения PNG - PullRequest
0 голосов
/ 09 сентября 2011

Есть ли способ Java API или приложения для преобразования табличных данных CSV в виде текста и преобразования их в файл PNG со строками, сеткой и заголовком?

Сейчас я думаю о xhtmlrenderer, который преобразует данные HTML в изображение.

Обновлено: Андрей дал хороший ответ, я поставил его в качестве ответа. Кроме того, я использовал xhtmlrenderer / летающую тарелку с тем же результатом, чтобы преобразовать HTML-документ в изображение. Потребовалось столько же усилий, сколько и в его примере.

http://code.google.com/p/flying-saucer/

Теперь на github:

https://github.com/berlinbrown/XHTMLRendererForHtmlDataToImage

1 Ответ

2 голосов
/ 09 сентября 2011

Можете ли вы прочитать табличные данные и поместить их в JTable?

Если это так, вызов table.paintComponent(Graphics) является защищенным методом - см. Вместо table.paint(Graphics), где объект Graphics получен из изображения, которое является предпочтительным размером таблицы.


Не могли бы вы привести более полный пример?

Table image

В этом примере используется Nimbus PLAF для «затенения альтернативной строки», которое, я думаю, должна иметь каждая таблица.

import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.table.JTableHeader;

import javax.imageio.ImageIO;
import java.io.File;

class TableImage {

    public static void main(String[] args) throws Exception {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch(Exception useDefault) {
        }

        Object[][] data = {
            {"Hari", new Integer(23), new Double(78.23), new Boolean(true)},
            {"James", new Integer(23), new Double(47.64), new Boolean(false)},
            {"Sally", new Integer(22), new Double(84.81), new Boolean(true)}
        };

        String[] columns = {"Name", "Age", "GPA", "Pass"};

        JTable table = new JTable(data, columns);
        JScrollPane scroll = new JScrollPane(table);

        JPanel p = new JPanel(new BorderLayout());
        p.add(scroll,BorderLayout.CENTER);

        // JTable must have been added to a TLC in order to render
        // correctly - go figure.
        JFrame f = new JFrame("Never shown");
        f.setContentPane(scroll);
        f.pack();

        JTableHeader h = table.getTableHeader();
        Dimension dH = h.getSize();
        Dimension dT = table.getSize();
        int x = (int)dH.getWidth();
        int y = (int)dH.getHeight() + (int)dT.getHeight();

        scroll.setDoubleBuffered(false);

        BufferedImage bi = new BufferedImage(
            (int)x,
            (int)y,
            BufferedImage.TYPE_INT_RGB
            );

        Graphics g = bi.createGraphics();
        h.paint(g);
        g.translate(0,h.getHeight());
        table.paint(g);
        g.dispose();

        JOptionPane.showMessageDialog(null, new JLabel(new ImageIcon(bi)));
        ImageIO.write(bi,"png",new File("table.png"));

        // our TLC forces us to explicitly exit the VM
        System.exit(0);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...