Avatar billede 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.
Avatar billede carstenknudsen Nybegynder
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
Avatar billede Slettet bruger
10. oktober 2002 - 15:22 #2
Tak for det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester