parnian~parnian
پنج شنبه 19 اردیبهشت 1392, 16:26 عصر
سلام دوستان عزیز
یه سوال داشتم ازتون :
من واسه option پرینت توی برنامه خودم از frame مربوطه پرینت میگیرم ولی مشکلی که داره اینه که هیچ تنظیمی نمیشه روش انجام داد و شکل جالبی در کل نداره
من میخوام اطلاعات فریم رو انتقال بدم به word یا excell یا چیزی مثل print preview . راهش رو بلدم ولی چون اطلاعات من فریم هست و جدول داره نمیدونم چطوری باید اینکارو بکنم .
اگه راهنماییم کنین ممنون میشم .
spiderman200700
پنج شنبه 19 اردیبهشت 1392, 18:21 عصر
سلام
تا اونجا که من میدونم ، تنها راه پرینت کردن کامپوننت ها ، تبدیل اونا به Image هست.
میتونی یه Image از کامپوننتی که میخوای، تهیه کنی و توی یه پنجره دیگه به عنوان Print Preview نمایشش بدی. یه دکمه هم توی پنجره Print Preview قرار میدی که پنجره Print Dialog رو نمایش بدی.توی Print Dialog هم که انواع تنظیمات برای چاپ وجود داره.
اگه هنوزم مشکلی داری بگو تا بیشتر توضیح بدم.
parnian~parnian
جمعه 20 اردیبهشت 1392, 13:02 عصر
ممنون از توضیحاتت ولی می دونین چیه ........... وقتی این شکلی پرینت تهیه میشه حتی buttom ها هم توی فریمی که پرینت میشه میاد و شکل قشنگی پیدا نمی کنه .................این مشکل رو چطوری میشه رفع کرد
و اینکه صفحه print preview رو باید خودم طراحی کنم یا به صورت defalt هست
spiderman200700
جمعه 20 اردیبهشت 1392, 15:01 عصر
فکر میکنم بشه کامپوننت های دلخواه رو توی پرینت آورد ولی یه کم کار میبره و باید خیلی سطح پایین کار کنی.
و Print Preview رو هم خودت باید طراحی کنی.
من این کد رو واست نوشتم. هم Print Preview داره هم پرینت میکنه و هم در فایل ذخیره میکنه. یه نگاهی به بکن. شاید بتونی تغییرش بدی که کدهای مورد نیازت روش چاپ بشه.
مثلا یه راه واسه اینکه Button ها توی چاپ نیان اینه که یه تایع بازگشتی بنویسی که تمام کامپوننت ها ی روی JPanel رو پویش کنی و اونایی که از نوع JButton هستن رو Hide کنی و بعد از پرینت دوباره Show کنی. به کلاس PrintUtilities خوب دقت کن.
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
public class PrintPreview extends javax.swing.JDialog {
JComponent component;
Image image;
long c = 0;
public PrintPreview(java.awt.Frame parent, boolean modal, JComponent component) {
super(parent, modal);
try {
initComponents();
this.component=component;
image = PrintUtilities.convertToImage(component);
PrintUtilities.printImageToFile(image,"png", new File("test.png"));
jLabel1.setIcon(new ImageIcon(image.getScaledInstance(jLabel1.getWidth (), jLabel1.getHeight(), Image.SCALE_SMOOTH)));
} catch (PrinterException ex) {
Logger.getLogger(PrintPreview.class.getName()).log (Level.SEVERE, null, ex);
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstan ts.DISPOSE_ON_CLOSE);
addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentResized(java.awt.event.ComponentEvent evt) {
formComponentResized(evt);
}
});
addWindowStateListener(new java.awt.event.WindowStateListener() {
public void windowStateChanged(java.awt.event.WindowEvent evt) {
formWindowStateChanged(evt);
}
});
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(148, 148, 148)
.addComponent(jButton1)
.addContainerGap(179, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILI NG, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILI NG, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 246, Short.MAX_VALUE)
.addGap(18, 18, 18)
.addComponent(jButton1)
.addContainerGap())
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
PrintUtilities.printComponent(component, true);
} catch (PrinterException ex) {
Logger.getLogger(PrintPreview.class.getName()).log (Level.SEVERE, null, ex);
}
}
private void formComponentResized(java.awt.event.ComponentEvent evt) {
if (C++ % 10 == 0) {
System.out.println(jLabel1.getPreferredSize());
jLabel1.setPreferredSize(new Dimension(getSize().width - 50, getSize().height - 100));
jLabel1.setIcon(new ImageIcon(image.getScaledInstance(jLabel1.getPrefe rredSize().width, jLabel1.getPreferredSize().height, Image.SCALE_SMOOTH)));
}
}
private void formWindowStateChanged(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
// End of variables declaration
}
class PrintUtilities {
private static class ComponentPrinter implements Printable {
private Component component;
private boolean fill;
public ComponentPrinter(Component component, boolean fill) {
this.component = component;
this.fill = fill;
}
@Override
public int print(Graphics g, PageFormat format, int pageIndex) throws PrinterException {
if (pageIndex > 0) {
return Printable.NO_SUCH_PAGE;
}
Graphics2D g2 = (Graphics2D) g;
g2.translate(format.getImageableX(), format.getImageableY());
double width = (int) Math.floor(format.getImageableWidth());
double height = (int) Math.floor(format.getImageableHeight());
if (!fill) {
width = Math.min(width, component.getPreferredSize().width);
height = Math.min(height, component.getPreferredSize().height);
}
component.setBounds(0, 0, (int) Math.floor(width), (int) Math.floor(height));
if (component.getParent() == null) {
component.addNotify();
}
component.validate();
component.doLayout();
component.printAll(g2);
if (component.getParent() != null) {
component.removeNotify();
}
return Printable.PAGE_EXISTS;
}
}
public static Image convertToImage(Component component) throws PrinterException {
Paper paper = new Paper();
paper.setSize(8.3 * 72, 11.7 * 72);
paper.setImageableArea(18, 18, 559, 783);
PageFormat pf = new PageFormat();
pf.setPaper(paper);
pf.setOrientation(PageFormat.LANDSCAPE);
BufferedImage bufferedImage = new BufferedImage(
(int) Math.round(pf.getWidth()),
(int) Math.round(pf.getHeight()),
BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = bufferedImage.createGraphics();
g2d.setColor(Color.WHITE);
g2d.fill(new Rectangle(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight()));
ComponentPrinter cp = new ComponentPrinter(component, true);
try {
cp.print(g2d, pf, 0);
} finally {
g2d.dispose();
}
return bufferedImage;
}
public static boolean printImageToFile(Image img,String formatName, File file) {
try {
ImageIO.write((RenderedImage) img, formatName, file);
} catch (IOException ex) {
return false;
}
return true;
}
public static void printComponent(JComponent component, boolean fill) throws PrinterException {
PrinterJob printerJob = PrinterJob.getPrinterJob();
PageFormat pageFormat = printerJob.defaultPage();
pageFormat.setOrientation(PageFormat.LANDSCAPE);
PageFormat postformat = printerJob.pageDialog(pageFormat);
if (pageFormat != postformat) {
printerJob.setPrintable(new ComponentPrinter(component, fill), postformat);
if (printerJob.printDialog()) {
printerJob.print();
}
}
}
}
import javax.swing.JButton;
public class test extends javax.swing.JFrame {
public test() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstan ts.EXIT_ON_CLOSE);
jLabel1.setText("jLabel1");
jLabel2.setText("jLabel1");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.Grou pLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax. swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_S IZE, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.Grou pLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.Component Placement.RELATED)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(183, Short.MAX_VALUE))
);
jButton1.setText("Print");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("add");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addGap(140, 140, 140)
.addComponent(jButton1)
.addGap(18, 18, 18)
.addComponent(jButton2)
.addContainerGap(207, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.G roupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2)))
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
new PrintPreview(this, true, jPanel1).setVisible(true);
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
jPanel1.add(new JButton("omid")).setVisible(true);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClass Name());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(test.class.getN ame()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(test.class.getN ame()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(test.class.getN ame()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(test.class.getN ame()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new test().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
// End of variables declaration
}
parnian~parnian
یک شنبه 22 اردیبهشت 1392, 12:30 عصر
ممنون لطف کردین ....................... وقتی کامل اجرا کردم نتیجه اش رو می گم که بقیه دوستان استفاده کنن
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.