🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: borland.public.jbuilder.java.language
Article #18984

Re: Printing Reports

#18984
From: Conrad Hoesle-Kienzlen
Date: Thu, 19 Mar 1998 00:00
245 lines
9275 bytes
Jennifer,
if you are writing an application, there is no problem. You can write all
you like to a file and later retrieve that and send it to the printer. If
you are writing an applet, things don't look so well. You can't just write
anything to a file, at least not on the target machine, you would have to
use the server from where the applet was loaded for that.
Printing, in general, *has* to do with graphics, always, because you don't
"just send some text to the printer" as you would with any other PC-based
language. You have to get a graphics context for the target printer (which
will open the printer dialog, so the user can choose which of her/his
umpteen different printers to use, and thus giving Java the properties of
that chosen printer) and then draw your text on the virtual page of that
printer. The process is made all the more interesting by the buggy way in
which the printer properties are reported to Java: totally wrong! If I query
the page dimensions of my (well known) HP 4-printer, I get something like 76
x 0 (the numbers are assumed to be pixels!). So the thing is to find out by
trial and error how much you can print on a given page. But the bottom line
is: you can't get away from the graphics.
Below is a class that I used to find out about printing.
Cheers,
   Conrad
-------------------------------- snip -------------------------------------

//Title:       Your Product Name
//Version:
//Copyright:   Copyright (c) 1997
//Author:      Your Name
//Company:     Your Company
//Description: Your description
package printpk;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.Properties;
import borland.jbcl.layout.*;
import borland.jbcl.control.*;

public class printap extends Applet {
  XYLayout xYLayout1 = new XYLayout();
  boolean isStandalone = false;
  Label label1 = new Label();
  Button button1 = new Button();
  Frame pfrm = new Frame("PrintFrame");
  Font sansn14 = new Font("SansSerif", 0, 14);
  Font sansb14 = new Font("SansSerif", 1, 14);
  Font sansn20 = new Font("SansSerif", 0, 20);
  Font sansb20 = new Font("SansSerif", 1, 20);
  Font serifn14 = new Font("TimesRoman", 0, 14); // Note: IE4 doesn't know
"serif"
  Font serifb14 = new Font("TimesRoman", 1, 14); // IE4 is rapidly
approaching
  Font serifn20 = new Font("TimesRoman", 0, 20); // the status of "best
hated browser"
  Font serifb20 = new Font("TimesRoman", 1, 20); // with me! Damn Microshit!

  Font courn14 = new Font("Courier", 0, 14);
  Font courb14 = new Font("Courier", 1, 14);
  Font courn20 = new Font("Courier", 0, 20);
  Font courb20 = new Font("Courier", 1, 20);
  Label label2 = new Label();
  Label label3 = new Label();

  //Construct the applet
  public printap() {
  }

  //Initialize the applet
  public void init() {
    try { jbInit(); } catch (Exception e) { e.printStackTrace(); }
  }

  //Component initialization
  private void jbInit() throws Exception{
    xYLayout1.setWidth(400);
    xYLayout1.setHeight(300);
    button1.setLabel("Print");
    button1.addActionListener(new printap_button1_actionAdapter(this));
    this.setLayout(xYLayout1);
    this.add(label1, new XYConstraints(17, 24, 364, -1));
    this.add(button1, new XYConstraints(172, 265, -1, -1));
    this.add(label2, new XYConstraints(16, 69, 328, -1));
    this.add(label3, new XYConstraints(15, 110, 354, -1));
    PrintJob prjob = getToolkit().getPrintJob(pfrm, "PrintJob",
(Properties)null);
    label2.setText("Dimension: "+prjob.getPageDimension());
    label3.setText("Resolution: "+prjob.getPageResolution());
    this.requestFocus();
  }

  //Start the applet
  public void start() {
  }

  //Stop the applet
  public void stop() {
  }

  //Destroy the applet
  public void destroy() {
  }

  //Main method
  public static void main(String[] args) {
    printap applet = new printap();
    applet.isStandalone = true;
    DecoratedFrame frame = new DecoratedFrame();
    frame.setTitle("Applet Frame");
    frame.add(applet, BorderLayout.CENTER);
    applet.init();
    applet.start();
    frame.pack();
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    frame.setLocation((d.width - frame.getSize().width) / 2, (d.height -
frame.getSize().height) / 2);
    frame.setVisible(true);
  }

  void button1_actionPerformed(ActionEvent e) {
    PrintJob prjob = getToolkit().getPrintJob(pfrm, "PrintJob",
(Properties)null);
    Graphics pg = prjob.getGraphics();
    String str;
    FontMetrics fm;
    int h, w, y = 40;
    if (pg != null) {
      label1.setText("Printing....");
      pg.setFont(sansn14);
      fm = pg.getFontMetrics(sansn14);
      str = "This is a string printed in SansSerif, normal, 14 Points;
overall width=";
      w = fm.stringWidth(str+"999");
      pg.drawString(str+w , 10, y);
      h = fm.getHeight();
      pg.setFont(sansb14);
      fm = pg.getFontMetrics(sansb14);
      str = "This is a string printed in SansSerif, bold, 14 Points; overall
width=";
      w = fm.stringWidth(str+"999");
      pg.drawString(str+w ,10, y=y+2*h);
      h = fm.getHeight();
      pg.setFont(sansn20);
      fm = pg.getFontMetrics(sansn20);
      str = "This is a string printed in SansSerif, normal, 20 Points;
overall width=";
      w = fm.stringWidth(str+"999");
      pg.drawString(str+w ,10, y=y+2*h);
      h = fm.getHeight();
      pg.setFont(sansb20);
      fm = pg.getFontMetrics(sansb20);
      str = "This is a string printed in SansSerif, bold, 20 Points; overall
width=";
      w = fm.stringWidth(str+"999");
      pg.drawString(str+w ,10, y=y+2*h);
      h = fm.getHeight();
      pg.setFont(serifn14);
      fm = pg.getFontMetrics(serifn14);
      str = "This is a string printed in Serif, normal, 14 Points; overall
width=";
      w = fm.stringWidth(str+"999");
      pg.drawString(str+w , 10, y=y+2*h);
      h = fm.getHeight();
      pg.setFont(serifb14);
      fm = pg.getFontMetrics(serifb14);
      str = "This is a string printed in Serif, bold, 14 Points; overall
width=";
      w = fm.stringWidth(str+"999");
      pg.drawString(str+w ,10, y=y+2*h);
      h = fm.getHeight();
      pg.setFont(serifn20);
      fm = pg.getFontMetrics(serifn20);
      str = "This is a string printed in Serif, normal, 20 Points; overall
width=";
      w = fm.stringWidth(str+"999");
      pg.drawString(str+w ,10, y=y+2*h);
      h = fm.getHeight();
      pg.setFont(serifb20);
      fm = pg.getFontMetrics(serifb20);
      str = "This is a string printed in Serif, bold, 20 Points; overall
width=";
      w = fm.stringWidth(str+"999");
      pg.drawString(str+w ,10, y=y+2*h);
      h = fm.getHeight();
      pg.setFont(courn14);
      fm = pg.getFontMetrics(courn14);
      str = "This is a string printed in Courier, normal, 14 Points; overall
width=";
      w = fm.stringWidth(str+"999");
      pg.drawString(str+w , 10, y=y+2*h);
      h = fm.getHeight();
      pg.setFont(courb14);
      fm = pg.getFontMetrics(courb14);
      str = "This is a string printed in Courier, bold, 14 Points; overall
width=";
      w = fm.stringWidth(str+"999");
      pg.drawString(str+w ,10, y=y+2*h);
      h = fm.getHeight();
      pg.setFont(courn20);
      fm = pg.getFontMetrics(courn20);
      str = "This is a string printed in Courier, normal, 20 Points; overall
width=";
      w = fm.stringWidth(str+"999");
      pg.drawString(str+w ,10, y=y+2*h);
      h = fm.getHeight();
      pg.setFont(courb20);
      fm = pg.getFontMetrics(courb20);
      str = "This is a string printed in Courier, bold, 20 Points; overall
width=";
      w = fm.stringWidth(str+"999");
      pg.drawString(str+w ,10, y=y+2*h);
      pg.dispose();  // Note: this is a form feed!!!!!!! One could do a
second page afterwards
      prjob.end();  // now things get sent to the printer - job done.
    }
  }

}

class printap_button1_actionAdapter implements java.awt.event.ActionListener
{
  printap adaptee;

  printap_button1_actionAdapter(printap adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.button1_actionPerformed(e);
  }
}

-------------------------------   snap
---------------------------------------------


Jennifer Merkel wrote:

> Can anyone give me some help?  I am trying to design some reports to be
> printed out.  I can write the report information to a file fine.  How do
> I send it to the printer?  I know there are some callses in Java that
> have to do with printing but most of them look like they deal with
> graphics,  I just want to print out text to the printer.
>
> Jennifer
Technical Details
Message-ID: <35119157.AFC957DF@csi.com>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <3511813C.A18DAD08@edmundsassoc.com>

Show Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit
X-Google-Thread: f74b3,7f9a5d5e1be5afb7
X-Google-Attributes: gidf74b3,public
From: Conrad Hoesle-Kienzlen <Conrad_Hoesle@csi.com>
Subject: Re: Printing Reports
Date: 1998/03/19
Message-ID: <35119157.AFC957DF@csi.com>
X-Deja-AN: 335720367
Content-Transfer-Encoding: 7bit
References: <3511813C.A18DAD08@edmundsassoc.com>
Content-Type: text/plain; charset=us-ascii
Organization: CHK IT-Consulting
Mime-Version: 1.0
Newsgroups: borland.public.jbuilder.java.language