• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Tim Cooke
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Liutauras Vilda
Sheriffs:
  • Rob Spoor
  • Junilu Lacar
  • paul wheaton
Saloon Keepers:
  • Stephan van Hulst
  • Tim Moores
  • Tim Holloway
  • Carey Brown
  • Scott Selikoff
Bartenders:
  • Piet Souris
  • Jj Roberts
  • fred rosenberger

Print Preview in Java swing

 
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Dear Friends
I have made Application for Image processing Using swing API, I have one of the module in that Print Images with Print Previewe,
Searching through Internet I have found ready made API specifically made for Java Printing with print preview that is PFDocument
http://www.javaworld.com/javaworld/jw-03-2001/jw-0302-print-p2.html
My problem is that
1) I am receiving Dark Black Square instead of Image on a Page why?
I can see Image properly in print preview screen. But that image not coming on page,
2) How can add more than one image for print preview.
3) Also I like to print Image 1 image on single page,2 Image on single page ,4 Image on single page, 6 Image on single page like that how can I do that.
Please give me suggestion or example or code for above given problems
import com.infocom.print.*;
import java.awt.*;
import java.awt.print.*;
import java.net.*;
import java.awt.Image;
public class CreatePreview extends PFPrintObject implements Printable
{
private PFDocument pdf=null;
private PFPage pfp=null;
private PFPageFormat pfformat=null;
private PFImage pfImage=null;
private PFCmUnit pfcu=null;
private static Graphics g = null;
private static PageFormat pft = null;
private PFFrame pfFrame=null;
public CreatePreview(){
pdf = new PFDocument();
pfformat= new PFPageFormat();
pfcu = new PFCmUnit();
pfp = new PFPage();
pfImage = new PFImage();
pfFrame=new PFFrame();
}
public void setPrintPreview()
{
try{

pdf.setDocumentName("First Docuement Print");
pfformat.setGutter(pfcu);
pfformat.setPageOrientation(PFPageFormat.PORTRAIT);
pfformat.setPageSize(80);

PFUnit pageUnit = new PFCmUnit(5);
PFUnit pageUnit1 = new PFCmUnit(5);
pfImage.setHeight(pageUnit);
pfImage.setWidth(pageUnit1);
pfp.setPageFormat(pfformat);
pfImage.setURL("file:///c:/asp/CRANE.JPG");
pfp.add(pfImage);
pdf.addPage(pfp);
pdf.showPageDialog(true);
pdf.showPrintDialog(true);
pdf.printPreview();

}catch(Exception e){System.out.println("Exception in set priview->"+e);}
}
public void print(Graphics2D parg)
{

parg.draw3DRect(10,50,50,50,true);

}

public int print(java.awt.Graphics g,java.awt.print.PageFormat p2,int p3) throws java.awt.print.PrinterException
{
System.out.println("Print method with java.awt.print.PageFormat has been called ");
Graphics2D g2 = (Graphics2D) g;
if(p3==0)
{
String s ="Hello";
g2.setPaint(Color.black);
g2.translate(p2.getImageableX(),p2.getImageableY());
g2.drawString(s,50,50);
return (PAGE_EXISTS);
}else{
return (NO_SUCH_PAGE);
}
}
public static void main(String args[])
{
CreatePreview CP = new CreatePreview();
CP.setPrintPreview();
}

}
 
Greenhorn
Posts: 11
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
For all the manipulations that you are mentioning you have to do the page length/width calculations..
Also regarding the size of image... try adding the images in their own JPanel .. before placing it on the global JPanel.
 
Pondy Prem
Greenhorn
Posts: 11
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
This one may be useful:

import java.awt.*;
import javax.swing.*;
import java.awt.print.*;
/** A simple utility class that lets you very simply print
* an arbitrary component. Just pass the component to the
* PrintUtilities.printComponent. The component you want to
* print doesn't need a print method and doesn't have to
* implement any interface or do anything special at all.
* <P>
* If you are going to be printing many times, it is marginally more
* efficient to first do the following:
* <PRE>
* PrintUtilities printHelper = new PrintUtilities(theComponent);
* </PRE>
* then later do printHelper.print(). But this is a very tiny
* difference, so in most cases just do the simpler
* PrintUtilities.printComponent(componentToBePrinted).
*
* 7/99 Marty Hall, http://www.apl.jhu.edu/~hall/java/
* May be freely used or adapted.
*/
public class PrintUtilities implements Printable {
private Component componentToBePrinted;
public static void printComponent(Component c) {
new PrintUtilities(c).print();
}

public PrintUtilities(Component componentToBePrinted) {
this.componentToBePrinted = componentToBePrinted;
}

public void print() {
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintable(this);
if (printJob.printDialog())
try {
printJob.print();
} catch(PrinterException pe) {
System.out.println("Error printing: " + pe);
}
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
if (pageIndex > 0) {
return(NO_SUCH_PAGE);
} else {
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
disableDoubleBuffering(componentToBePrinted);
componentToBePrinted.paint(g2d);
enableDoubleBuffering(componentToBePrinted);
return(PAGE_EXISTS);
}
}
/** The speed and quality of printing suffers dramatically if
* any of the containers have double buffering turned on.
* So this turns if off globally.
* @see enableDoubleBuffering
*/
public static void disableDoubleBuffering(Component c) {
RepaintManager currentManager = RepaintManager.currentManager(c);
currentManager.setDoubleBufferingEnabled(false);
}
/** Re-enables double buffering globally. */

public static void enableDoubleBuffering(Component c) {
RepaintManager currentManager = RepaintManager.currentManager(c);
currentManager.setDoubleBufferingEnabled(true);
}
}
 
Pondy Prem
Greenhorn
Posts: 11
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I copied this source from somwhre in net and finetuned...
It may be of use :
public class PrintPreview extends JDialog{
protected int m_wPage;
protected int m_hPage;

protected Printable m_target;
protected JComboBox m_cbScale;
protected PreviewContainer m_preview;

//protected PrintUtilities the_PrintUtilities;

public PrintPreview(JDialog parentJDialog, Printable target){
this(parentJDialog, target, "Print Preview");
}// C1 ends

public PrintPreview(JDialog parentJDialog,Printable target, String title){
super(parentJDialog, title);
setSize(800,600);
setModal(true);
this.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);

JToolBar tb = new JToolBar();
JButton bt = new JButton("Print", new ImageIcon("print.gif"));

ActionListener lst = new ActionListener(){
public void actionPerformed(ActionEvent e){
}
};

bt.addActionListener(lst);
bt.setAlignmentY(0.5f);
bt.setMargin(new Insets(4,6,4,6));
//tb.add(bt);

bt = new JButton("Close");
lst = new ActionListener(){
public void actionPerformed(ActionEvent e){
dispose();
}
};

bt.addActionListener(lst);
bt.setAlignmentY(0.5f);
bt.setMargin(new Insets(2,6,2,6));
tb.add(bt);

String [] scales = {"10", "25", "50", "100" };

m_cbScale = new JComboBox(scales);

lst = new ActionListener(){
public void actionPerformed(ActionEvent e){
Thread runner = new Thread(){
public void run(){
String str = m_cbScale.getSelectedItem().toString();
System.out.println("m_cbScale: " + str);
if(str.endsWith("%")){
str.substring(0, str.length()-1);
}
str.trim();
int scale = 0;

try{
scale = Integer.parseInt(str);
}
catch(NumberFormatException ex){
System.out.println("scale: " + scale);
return;
}

int w = (int) (m_wPage*scale/100);
int h = (int) (m_hPage*scale/100);

Component [] comps = m_preview.getComponents();

for(int k=0; k<comps.length; k++){
if(!( comps[k] instanceof PagePreview)) {
continue;
}

PagePreview pp = (PagePreview) comps[k];
pp.setScaledSize(w,h);
}// for() ends
m_preview.doLayout();
m_preview.getParent().getParent().validate();

}// run() ends
};// Thread ends

runner.start();
}
};// ActionListener ends

m_cbScale.addActionListener(lst);
m_cbScale.setMaximumSize(m_cbScale.getPreferredSize());
m_cbScale.setEditable(true);
tb.addSeparator();
tb.add(m_cbScale);

getContentPane().add(tb, BorderLayout.NORTH);

m_preview = new PreviewContainer();

PrinterJob prnJob = PrinterJob.getPrinterJob();
PageFormat pageFormat = prnJob.defaultPage();

if(pageFormat.getHeight() ==0 ||pageFormat.getWidth() ==0 ){
//error
return ;
}
m_wPage = (int)(pageFormat.getWidth());
m_hPage = (int)(pageFormat.getHeight());

int scale = 50;

int w = (int)(m_wPage*scale/100);
int h = (int)(m_hPage*scale/100);

int pageIndex = 0;

try{
while(true){
BufferedImage img = new BufferedImage(m_wPage,m_hPage, BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();
g.setColor(Color.white);
g.fillRect(0,0,m_wPage, m_hPage);
if( target.print(g, pageFormat, pageIndex) != Printable.PAGE_EXISTS){
break;
}
PagePreview pp = new PagePreview(w,h, img);
m_preview.add(pp);
pageIndex++;

}
}catch(PrinterException pe){
pe.printStackTrace();
}

JScrollPane ps = new JScrollPane(m_preview);
getContentPane().add(ps, BorderLayout.CENTER);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);
}// C2 ends



}// class PrintPreview ends
class PreviewContainer extends JPanel{
protected int H_GAP = 16;
protected int V_GAP = 10;

public Dimension getPreferredSize(){
int n = getComponentCount();

if(n == 0){ return new Dimension(H_GAP, V_GAP);}
Component comp = getComponent(0);
Dimension dc = comp.getPreferredSize();

int w = dc.width;
int h = dc.height;

Dimension dp = getParent().getSize();
int nCol = Math.max( (dp.width-H_GAP)/(w+H_GAP) , 1 );
int nRow = n/nCol;

if(nRow*nCol < n) nRow++;

int ww = nCol*(w+H_GAP) + H_GAP ;
int hh = nRow*(h+V_GAP) + V_GAP ;

Insets ins = getInsets();
return new Dimension(ww+ins.left+ins.right,
hh+ ins.top+ins.bottom);
}// getPreferredSize()ends

public Dimension getMaximumSize(){
return getPreferredSize();
}
public Dimension getMinimumSize(){
return getPreferredSize();
}

public void doLayout(){
Insets ins = getInsets();

int x = ins.left + H_GAP;
int y = ins.top + V_GAP;

int n = getComponentCount();

if(n==0) return;

Component comp = getComponent(0);
Dimension dc = comp.getPreferredSize();
int w = dc.width;
int h = dc.height;

Dimension dp = getParent().getSize();
int nCol = Math.max( (dp.width-H_GAP)/(w+V_GAP) ,1 );
int nRow = n/nCol;

if(nRow*nCol < n) nRow++;

int index = 0;
for(int k=0; k<nRow; k++){
for(int m=0; m<nCol; m++){
if(index >=n ) return;
comp = getComponent(index++);
comp.setBounds(x,y,w,h);
x += w+ H_GAP;
}//for(m.) ends
y += h+V_GAP;
x = ins.left + H_GAP;
}// for(k) ends

}// doLayout() ends

}// class PreviewContainer ends
class PagePreview extends JPanel{
protected int m_w;
protected int m_h;
protected Image m_source;
protected Image m_img;

public PagePreview(int w, int h, Image source){
m_w = w;
m_h = h;

m_source = source;
m_img = m_source.getScaledInstance(m_w, m_h, Image.SCALE_SMOOTH);
m_img.flush();
setBackground(Color.white);
setBorder(new MatteBorder(1,1,2,2,Color.black));
}//PagePreview ends

public void setScaledSize(int w , int h){
m_w = w;
m_h = h;
m_img = m_source.getScaledInstance(m_w, m_h, Image.SCALE_SMOOTH);
repaint();
}//void setScaledSize() ends

public Dimension getPreferredSize(){
Insets ins = getInsets();
return new Dimension(m_w+ins.left+ins.right,
m_h+ins.top + ins.bottom);
}

public Dimension getMaximumSize(){
return getPreferredSize();
}
public Dimension getMinimumSize(){
return getPreferredSize();
}

public void paint(Graphics g){
g.setColor(getBackground());
g.fillRect(0,0, getWidth(), getHeight());
g.drawImage(m_img, 0, 0, this);
paintBorder(g);
}
}//class PagePreview ends
************************ useage **************
public void showPreview(JDialog parentJDialog){
new PrintPreview(parentJDialog, PrintUtilities.this, "MyPage- preview") ;
}
 
pie. tiny ad:
Building a Better World in your Backyard by Paul Wheaton and Shawn Klassen-Koop
https://coderanch.com/wiki/718759/books/Building-World-Backyard-Paul-Wheaton
reply
    Bookmark Topic Watch Topic
  • New Topic