Article View: borland.public.jbuilder.java.language
Article #17088Re: Anyone out there willing to help?
From: Dillan Fernando
Date: Sun, 20 Dec 1998 00:00
Date: Sun, 20 Dec 1998 00:00
231 lines
8497 bytes
8497 bytes
Hi!
I'm really not sure what you are trying to do exactly, but I have been using
Tookit.getPrintJob(Frame, string , properties); method for printing without
any problem.
Hope I have answered your question.
Oh BTW, we have written a cool JavaBean called PrintLet, for printing.
Download it at www.palmsoftware.com. It might help you.
Regards
Dillan Fernando
Senior Analyst
Palmware (Pvt) Ltd.
Sri Lanka
Ross Dukeshier wrote in message <75i7jh$5gi4@forums.borland.com>...
>I'm at the end of my rope here folks. I've read all the messages in 5
>different newsgroups, read the bug parade reports, read the frequently
asked
>questions, and looked at all the samples and the docs for the JDK 1.2
stuff.
>Someone out there has to know the answers to my problem...
>
>I'm trying to send text to a printer using the JDK 1.2 classes and all I
get
>is a blank page. I've tried using the BufferedImage class to get the
>graphics object and I've tried getting the graphics object from a visible
>JTextArea both producing the same results - blank page. When I run it, the
>book shows as having the page (can't really tell if anything's on it,
>though). There has to be something I'm missing between the interaction of
>the PrinterJob, the Book, and my Printable object's print method. What is
>the relationship between the print method and the book? If I've set the
>pageable object of the PrinterJob to the book, what am I doing with the
>print method? Just determining if the page exists or actually drawing the
>specified page on the graphics object? From the docs, I gathered I was
>building the graphics object, but even when I draw stuff straight on it in
>the print method, I still get the ol' blank page. What am I missing???
>Please help, this is driving me insane!!!
>
>Here's the current view of my code...
>
>
>package cm;
>
>import java.io.*;
>import java.awt.*;
>import java.awt.event.*;
>import java.awt.font.*;
>import java.text.*;
>import java.util.*;
>import java.awt.print.*;
>import java.awt.geom.*;
>import javax.swing.*;
>import java.awt.image.*;
>
>public class PrintableBook extends Writer implements Printable {
>
> protected String time;
> protected Font font;
> protected int fontsize;
> protected JFrame testFrame = new JFrame();
> protected JTextArea testArea = new JTextArea();
> protected Font headerfont;
> protected LineMetrics metrics;
> protected LineMetrics headermetrics;
> protected double x0;
> protected double y0;
> protected double headery;
> protected int linesperpage;
> protected int charnum = 0;
> protected int linenum = 0;
> protected int pagenum = 0;
> protected PrinterJob job;
> protected Book book;
> protected BufferedImage bi;
> protected Graphics2D page;
> protected PageFormat pageFormat;
>
> public PrintableBook(Font font, Vector text, PageFormat pageFormat) {
> try {
> testFrame.getContentPane().add(testArea);
> testFrame.setVisible(true);
> testArea.setText("This is the first line\n"+
> "This is the second line\n"+
> ".\n.\n.\n.\n.\n.\n");
> testFrame.setSize(500,500);
> System.out.println("Creating book");
> GraphicsEnvironment ge =
>GraphicsEnvironment.getLocalGraphicsEnvironment();
> PrinterJob job = PrinterJob.getPrinterJob();
>
> System.out.println("Getting time");
> DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG,
>DateFormat.SHORT);
> df.setTimeZone(TimeZone.getDefault());
> time = df.format(new Date());
>
> System.out.println("Setting page format");
> this.pageFormat = pageFormat;
>
> System.out.println("Determining lines per page");
> fontsize = font.getSize();
> System.out.println(font.getSize());
> double ih = pageFormat.getImageableHeight();
> System.out.println(ih);
> metrics = font.getLineMetrics("Test", 0, 4, new
>FontRenderContext(null,false,false));
>
> linesperpage = (int)
>(pageFormat.getImageableHeight()/metrics.getHeight());
> System.out.println(linesperpage);
>
> System.out.println("Getting graphics object");
> bi = new BufferedImage(612, 792, BufferedImage.TYPE_BYTE_BINARY);
> page = bi.createGraphics();
> page.setColor(Color.black);
> System.out.println("Creating book");
> book = new Book();
> System.out.println("Adding first page to book");
> //******
> book.append(this, pageFormat);
> System.out.println("Writing text to book");
> String line;
> for (int row=0; row < text.size(); row++) {
> line = (String) text.elementAt(row);
> System.out.println(line);
> write(line.toCharArray(),0,line.length());
> }
> System.out.println("Num Pages: "+book.getNumberOfPages());
> book.setPage(0, this, pageFormat);
> System.out.println("Num Pages: "+book.getNumberOfPages());
> job.setPageable(book);
> job.print();
> }
> catch (Exception e) {
> System.out.println("Error occurred");
> System.out.println(e.getMessage());
> }
> }
>
> public void write(char[] buffer, int index, int len) {
> System.out.println("In write method");
> synchronized(this.lock) {
> page.drawChars(buffer, index, len, (int) x0, (int) y0);
> }
> System.out.println("out of write method");
> }
>
> public void flush() {}
>
> public void close() {
> synchronized(this.lock) {
> if (page != null) page.dispose();
> }
> }
>
> public void pageBreak() { synchronized(this.lock) { newpage(); } }
>
> public int getLinesPerPage() {return this.linesperpage; }
>
> protected void newline() {
> charnum = 0;
> linenum++;
> if (linenum >= linesperpage) {
> book.setPage(pagenum, this, pageFormat);
> page = null;
> }
> }
>
> public int print(Graphics g, PageFormat pf, int pageIndex) {
> //g = (Graphics) book.getPrintable(pageIndex);
> System.out.println("Page number: "+pageIndex);
> //g=page;
> System.out.println(testArea.getText());
> g=(Graphics) testArea.getGraphics();
> return Printable.PAGE_EXISTS;
> }
>
> protected void newpage() {
> page = bi.createGraphics();
> book.append(this, pageFormat);
> linenum = 0;
> charnum = 0;
> pagenum++;
> page.setFont(headerfont);
> page.drawString(job.getJobName(), (int) pageFormat.getImageableX(),
>(int) pageFormat.getImageableY());
>
> String s = "- "+pagenum+" -";
> FontRenderContext frc = new FontRenderContext(null, false, false);
> int w = (int) font.getStringBounds(s, frc).getWidth();
> page.drawString(s, (int) (x0 + (pageFormat.getImageableWidth() - w)/2),
>(int) headery);
> w = (int) headerfont.getStringBounds(time, frc).getWidth();
> page.drawString(time, (int) (x0+pageFormat.getImageableWidth() - w),
>(int) headery);
>
> int y = (int) (headery + headermetrics.getDescent() + 1);
> page.drawLine((int) x0, (int) y, (int)
>(x0+pageFormat.getImageableWidth()), (int) y);
>
> page.setFont(font);
> }
>
> public static void main(String[] args) {
> String s = "This is a test";
> Font font = new Font("Monospaced", Font.PLAIN, 12);
> FontRenderContext frc = new FontRenderContext(null,false,false);
> LineMetrics lm = font.getLineMetrics(s,0,s.length(), frc);
> System.out.println(lm.getNumChars());
> Rectangle2D bounds = font.getStringBounds(s, frc);
> System.out.println(bounds.getWidth());
> Vector text = new Vector();
> text.addElement("This is the first line");
> text.addElement("This is the second line");
> text.addElement(".");
> text.addElement(".");
> text.addElement(".");
> text.addElement(".");
> text.addElement(".");
> text.addElement(".");
> int fontsize = 12;
> PrintableBook pb = new PrintableBook(font, text, new PageFormat());
> }
>}
>
>
Technical Details
Message-ID:
<75j357$5ga10@forums.borland.com>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<75i7jh$5gi4@forums.borland.com>Show Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: f74b3,5cf86e902afbf4b X-Google-Attributes: gidf74b3,public From: "Dillan Fernando" <dillan@geocities.com> Subject: Re: Anyone out there willing to help? Date: 1998/12/20 Message-ID: <75j357$5ga10@forums.borland.com> X-Deja-AN: 424211782 References: <75i7jh$5gi4@forums.borland.com> X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4 Organization: Palmware Newsgroups: borland.public.jbuilder.java.language