Slettet bruger
10. oktober 2002 - 14:50
Der er
1 kommentar og
1 løsning
Kørende eksempel på print fra java 1.4.1?
Har du et kørende eksempel, der skriver en tekst ud på default printer?
Det skal ikke være noget med fancy grafik, bare noget der skrive 3-4 linier ud.
Allerbedst: Noget der kan skrive 3-4 sider(PAGEABLE) hver med 3-4 linier ud.
Jeg kan ikke få det til at virke og giver derfor 100 point for noget, jeg kan kopiere efter.
10. oktober 2002 - 15:06
#1
Her er en klasse der kan hjælpe dig, i main metoden er
der et eksempel der skriver en fil ud.
import java.awt.*;
import java.awt.print.*;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
/**
* @author Carsten Knudsen
* @version 1.0
*
**/
public class TextPrinter
implements Pageable, Printable, Serializable {
private String defaultFontFamily = "Monospaced";
private int defaultFontStyle = Font.PLAIN;
private int defaultFontSize = 10;
private float lineSpaceFactor = 1.2f;
private int lineSpacing;
private int linesPerPage;
private int numberOfPages;
private int baseline = -1;
private PageFormat pageFormat;
private Font font;
private List lines;
public TextPrinter( String text, PageFormat pageFormat ) throws IOException {
this( new StringReader( text ), pageFormat );
} // constructor
public TextPrinter( File file, PageFormat pageFormat ) throws IOException {
this( new FileReader( file ), pageFormat );
} // constructor
public TextPrinter( Reader reader, PageFormat pageFormat ) throws IOException {
this.pageFormat = pageFormat;
BufferedReader breader = new BufferedReader( reader );
lines = new ArrayList();
String line;
while ( ( line = breader.readLine() ) != null ) {
lines.add( line );
} // while
breader.close();
setFont( new Font( defaultFontFamily, defaultFontStyle, defaultFontSize ) );
} // constructor
public void setFont( Font font ) {
this.font = font;
lineSpacing = (int)( font.getSize() * lineSpaceFactor );
linesPerPage = (int)Math.floor( pageFormat.getImageableHeight() / lineSpacing );
numberOfPages = ( lines.size() - 1 ) / linesPerPage + 1;
} // setFont
////////////////////////////////
// implementation of Pageable //
////////////////////////////////
public int getNumberOfPages() {
return numberOfPages;
} // getNumberOfPages
public PageFormat getPageFormat( int pageNumber ) {
return pageFormat;
} // getPageFormat
public Printable getPrintable( int pageNumber ) {
return this;
} // getPrintable
/////////////////////////////////
// implementation of Printable //
/////////////////////////////////
public int print( Graphics g, PageFormat pageFormat, int pageNumber ) {
if ( pageNumber < 0 || pageNumber >= numberOfPages )
return NO_SUCH_PAGE;
if ( baseline == -1 ) {
FontMetrics fm = g.getFontMetrics( font );
baseline = fm.getAscent();
} // if
g.setColor( Color.white );
g.fillRect( (int)pageFormat.getImageableX(), (int)pageFormat.getImageableY(),
(int)pageFormat.getImageableWidth(), (int)pageFormat.getImageableHeight() );
g.setFont( font );
g.setColor( Color.black );
int startLine = pageNumber * linesPerPage;
int endLine = startLine + linesPerPage - 1;
if ( endLine >= lines.size() ) {
endLine = lines.size() - 1;
} // if
int x0 = (int)pageFormat.getImageableX();
int y0 = (int)pageFormat.getImageableY();
y0 += lineSpacing;
for (int i = startLine; i <= endLine; i++) {
String line = (String)lines.get( i );
int index;
while ( ( index = line.indexOf( "\t" ) ) >= 0 ) {
line = line.substring( 0, index ) + " " + line.substring( index + 1 );
} // while
if ( line.length() > 0 ) {
g.drawString( line, x0, y0 );
} // if
y0 += lineSpacing;
} // for
return PAGE_EXISTS;
} // print
public static void main( String[] args ) throws IOException, PrinterException {
PrinterJob job = PrinterJob.getPrinterJob();
PageFormat pageFormat = job.pageDialog( job.defaultPage() );
TextPrinter textPrinter = new TextPrinter( new File( args[ 0 ] ), pageFormat );
job.setPageable( textPrinter );
if ( job.printDialog() ) {
job.print();
} // if
System.exit( 0 );
} // main
} // TextPrinter