smalem lagi iseng nyari cara buat print preview pake java, alhamdulillah berhasil, nih langsung aja gw kasih sourcenya
/*
* PagePanel.java
*/
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
/**
* Kelas ini fungsinya buat ngerender sesuatu di simpan dalam JPanel yang bisa di print
*
* @author Rizka Dwitama
*/
public class PagePanel extends JPanel implements Printable
{
public static final Dimension A4_SIZE = new Dimension(595, 842);
public static final Dimension A3_SIZE = new Dimension(842, 595 * 2);
public static final Dimension A2_SIZE = new Dimension(595 * 2, 842 * 2);
public static Dimension DEFAULT_SIZE = A4_SIZE;
private GridLayout grid = new GridLayout(4, 2);
public int id = 0;
public PagePanel(int p_number)
{
initComponents();
this.id=p_number;
}
private void initComponents()
{
grid.setHgap(10);
grid.setVgap(10);
this.setMaximumSize(DEFAULT_SIZE);
this.setMinimumSize(DEFAULT_SIZE);
this.setPreferredSize(DEFAULT_SIZE);
this.setBackground(Color.white);
this.setLayout(grid);
this.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
this.setSize(DEFAULT_SIZE);
}
@Override
public void paint(Graphics g)
{
super.paint(g);
g.setColor(Color.BLUE);
g.drawString(”This is page: “+id, 30, 30);
}
@Override
public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException
{
Graphics2D g2d = (Graphics2D) g;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
this.paint(g2d);
return (PAGE_EXISTS);
}
}
/*
* PagePanel.java
*/
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.PrinterJob;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
/**
* Kelas ini fungsinya buat nampilin kelas PagePanel skalian aplikasi buat ngejalaninnya
*
* @author Rizka Dwitama
*/
public class PrintPreview extends JFrame
{
private static final long serialVersionUID = 1L;
private BorderLayout borderLayout1 = new BorderLayout();
private FlowLayout flow = new FlowLayout();
private Font font = new Font(”Tahoma”, 0, 11);
private int panelsNo = 2;
private Dimension buttonDimension = new Dimension(120, 25);
private JPanel centerPanel = new JPanel();
private JScrollPane scroll = new JScrollPane(centerPanel);
private PagePanel[] previewPanel = null;
private JPanel operationsPanel = new JPanel();
private JButton nextButton = new JButton(”Next”);
private JButton previousButton = new JButton(”Previous”);
private JButton printButton = new JButton(”Print”);
public PrintPreview(int panelsNo)
{
try
{
this.panelsNo = panelsNo;
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
previewPanel = new PagePanel[this.panelsNo];
jbInit();
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void jbInit() throws Exception
{
flow.setHgap(20);
flow.setVgap(20);
centerPanel.setLayout(flow);
centerPanel.setBackground(new Color(51, 51, 51));
centerPanel.setPreferredSize(new Dimension(800, panelsNo * (842 + 40)));
for (int i = 0; i < panelsNo; i++)
{
previewPanel[i] = new PagePanel(i + 1);
centerPanel.add(previewPanel[i], null);
}
printButton.setForeground(Color.green.darker());
printButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
printActionPerformed(evt);
}
});
operationsPanel.setPreferredSize(new Dimension(10, 40));
operationsPanel.add(previousButton, null);
operationsPanel.add(nextButton, null);
operationsPanel.add(printButton, null);
Component comps[] = operationsPanel.getComponents();
for (Component comp : comps)
{
((JButton) comp).setFont(font);
((JButton) comp).setPreferredSize(buttonDimension);
}
this.setTitle(”Print”);
this.getContentPane().setLayout(borderLayout1);
this.setBounds(new Rectangle(10, 10, 650, 930));
this.getContentPane().add(scroll, BorderLayout.CENTER);
this.getContentPane().add(operationsPanel, BorderLayout.NORTH);
}
private void printActionPerformed(java.awt.event.ActionEvent event)
{
PrinterJob printJob = PrinterJob.getPrinterJob();
PageFormat pf = printJob.defaultPage();
pf.setOrientation(PageFormat.PORTRAIT);
Book book = new Book();
// First Page
book.append(previewPanel[0], pf);
// Second Page
book.append(previewPanel[1], pf);
printJob.setPageable(book);
if (printJob.printDialog())
{
try
{
printJob.print();
} catch (Exception ex)
{
ex.printStackTrace();
}
}
}
public static void main(String[] strings)
{
PrintPreview pr = new PrintPreview(2);
pr.setVisible(true);
}
}