import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.awt.print.*;
import java.io.File;
import java.io.IOException;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
public class Print_JPanel_Example extends JFrame implements Printable,
ActionListener {
// GUI //
private JButton button1 = new JButton("Save All");
private JButton button2 = new JButton("Print All");
private JPanel panelToPrint = new JPanel();
private JScrollPane scrollPane = new JScrollPane(panelToPrint);
// ScreenShot //
private BufferedImage bImage;
private List<BufferedImage> bImageList;
private PageFormat pf = new PageFormat();
private PrinterJob printerJob = PrinterJob.getPrinterJob();
private static final int CONS = 2;
// Constructor //
public Print_JPanel_Example(String s, char c) {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(800, 800);
this.setLocationByPlatform(true);
this.setAlwaysOnTop(true);
button1.addActionListener(this);
button2.addActionListener(this);
button1.setBackground(Color.MAGENTA);
button2.setBackground(Color.MAGENTA);
this.createContentOfScrollPane();
this.add(button1, BorderLayout.NORTH);
this.add(scrollPane, BorderLayout.CENTER);
this.add(button2, BorderLayout.SOUTH);
this.setVisible(true);
}
public static void main(String[] args) {
new Print_JPanel_Example("http://www.faz.de", 'u');
}
public void actionPerformed(ActionEvent e) {
bImageList = new ArrayList<BufferedImage>();
bImage = new BufferedImage(panelToPrint.getWidth(), panelToPrint
.getHeight(), BufferedImage.TYPE_INT_BGR);
panelToPrint.paint(bImage.getGraphics());
int wT = bImage.getWidth();
int hT = bImage.getHeight();
int w = (int) pf.getImageableWidth() * CONS;
int h = (int) pf.getImageableHeight() * CONS;
int x = (int) (wT / w);
int y = (int) (hT / h);
for (int i = 0; i <= x; i++) {
for (int j = 0; j <= y; j++) {
if (i == x && j == y)
bImageList.add(bImage.getSubimage(i * w, j * h, wT - x * w,
hT - y * h));
else if (i == x)
bImageList.add(bImage.getSubimage(i * w, j * h, wT - x * w,
h));
else if (j == y)
bImageList.add(bImage.getSubimage(i * w, j * h, w, hT - y
* h));
else
bImageList.add(bImage.getSubimage(i * w, j * h, w, h));
}
}
if (e.getActionCommand().equals("Print All"))
printAll();
else
saveAll();
}
public void saveAll() {
for (int i = 0; i < bImageList.size(); i++) {
try {
ImageIO.write(bImageList.get(i), "JPEG", new File("page" + i
+ ".jpg"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public boolean printAll() {
printerJob.setPrintable(this, pf);
try {
printerJob.print();
} catch (PrinterException e) {
e.printStackTrace();
return false;
}
return true;
}
public int print(Graphics g, PageFormat pFormat, int pageIndex)
throws PrinterException {
int page = 0;
Graphics2D g2 = (Graphics2D) g;
g2.translate((int) pFormat.getImageableX(), (int) pFormat
.getImageableY());
g2.scale(1.0 / CONS, 1.0 / CONS);
g2.drawImage(bImageList.get(page), 0, 0, this);
page++;
return page > bImageList.size() ? Printable.PAGE_EXISTS
: Printable.NO_SUCH_PAGE;
}
public void createContentOfScrollPane() {
JPanel p1 = new JPanel();
p1.add(new JButton("Button1"));
p1.add(new JButton("Button2"));
p1.add(new JButton("Button3"));
JPanel p2 = new JPanel(new BorderLayout());
p2.add(new JButton("North"), BorderLayout.NORTH);
p2.add(new JButton("South"), BorderLayout.SOUTH);
p2.add(new JButton("East"), BorderLayout.EAST);
p2.add(new JButton("West"), BorderLayout.WEST);
p2.add(new JButton("Center"), BorderLayout.CENTER);
JPanel p3 = new JPanel(new GridLayout(5, 1));
p3.add(new JTextField());
p3.add(new JTextField());
p3.add(new JTextField());
p3.add(new JTextField());
p3.add(new JTextField());
JPanel p4 = new JPanel(new GridLayout(5, 1));
p4.add(new JLabel(" Label1 "));
p4.add(new JLabel(" Label2 "));
p4.add(new JLabel(" Label3 "));
p4.add(new JLabel(" Label4 "));
p4.add(new JLabel(" Label5 "));
JTextArea ta = new JTextArea(faust);
ta.setFont(new Font("Arial", Font.BOLD, 16));
ta.setLineWrap(true);
panelToPrint.setLayout(new BoxLayout(panelToPrint, BoxLayout.Y_AXIS));
panelToPrint.add(p1);
panelToPrint.add(ta);
panelToPrint.add(p2);
panelToPrint.add(p3);
panelToPrint.add(new JColoredTable());
panelToPrint.add(p4);
}
class JColoredTable extends JTable {
public JColoredTable() {
this.setModel(new QuadratTableModelSimple());
}
public Component prepareRenderer(TableCellRenderer renderer,
int rowIndex, int vColIndex) {
Component c = super.prepareRenderer(renderer, rowIndex, vColIndex);
if (c instanceof JComponent) {
JLabel jl = (JLabel) c;
if (vColIndex % 2 == 0) {
jl.setBackground(Color.YELLOW);
jl.setAlignmentX(JLabel.RIGHT_ALIGNMENT);
jl.setHorizontalAlignment(JLabel.CENTER);
} else {
jl.setBackground(Color.PINK);
jl.setHorizontalAlignment(JLabel.RIGHT);
}
}
return c;
}
}
class QuadratTableModelSimple extends AbstractTableModel {
public int getRowCount() {
return 30;
}
public int getColumnCount() {
return 20;
}
public Object getValueAt(int row, int col) {
return new BigInteger("" + row).pow(col);
}
public String getColumnName(int column) {
return "Spalte" + column;
}
}
private static final String faust = "Habe nun, ach! Philosophie,"
+ "Juristerei und Medizin,\n" + "Und leider auch Theologie\n"
+ "Durchaus studiert, mit heißem Bemühn.\n"
+ "Da steh ich nun, ich armer Tor!\n"
+ "Und bin so klug als wie zuvor;\n"
+ "Heiße Magister, heiße Doktor gar\n"
+ "Und ziehe schon an die zehen Jahr\n"
+ "Herauf, herab und quer und krumm\n"
+ "Meine Schüler an der Nase herum-\n"
+ "Und sehe, daß wir nichts wissen können!\n"
+ "Das will mir schier das Herz verbrennen.\n"
+ "Zwar bin ich gescheiter als all die Laffen,\n"
+ "Doktoren, Magister, Schreiber und Pfaffen;\n"
+ "Mich plagen keine Skrupel noch Zweifel,\n"
+ "Fürchte mich weder vor Hölle noch Teufel-\n"
+ "Dafür ist mir auch alle Freud entrissen,\n"
+ "Bilde mir nicht ein, was Rechts zu wissen,\n"
+ "Bilde mir nicht ein, ich könnte was lehren,\n"
+ "Die Menschen zu bessern und zu bekehren.\n"
+ "Auch hab ich weder Gut noch Geld,\n"
+ "Noch Ehr und Herrlichkeit der Welt;\n"
+ "Es möchte kein Hund so länger leben!\n"
+ "Drum hab ich mich der Magie ergeben,\n"
+ "Ob mir durch Geistes Kraft und Mund\n"
+ "Nicht manch Geheimnis würde kund;\n"
+ "Daß ich nicht mehr mit saurem Schweiß\n"
+ "Zu sagen brauche, was ich nicht weiß;\n"
+ "Daß ich erkenne, was die Welt\n"
+ "Im Innersten zusammenhält,\n"
+ "Schau alle Wirkenskraft und Samen,\n"
+ "Und tu nicht mehr in Worten kramen.\n\n"
+ "O sähst du, voller Mondenschein,\n"
+ "Zum letzenmal auf meine Pein,\n"
+ "Den ich so manche Mitternacht\n"
+ "An diesem Pult herangewacht:\n"
+ "Dann über Büchern und Papier,\n"
+ "Trübsel'ger Freund, erschienst du mir!\n"
+ "Ach! könnt ich doch auf Bergeshöhn\n"
+ "In deinem lieben Lichte gehn,\n"
+ "Um Bergeshöhle mit Geistern schweben,\n"
+ "Auf Wiesen in deinem Dämmer weben,\n"
+ "Von allem Wissensqualm entladen,\n"
+ "In deinem Tau gesund mich baden!";
}