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
//////////////////////////////// // 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
Synes godt om
Slettet bruger
10. oktober 2002 - 15:22#2
Tak for det.
Synes godt om
Ny brugerNybegynder
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.