MokaForum - Il forum di MokaByte
Login Impostazioni Home Esci
Forums - stampare file di testo in Java
Forum MokaByte
banner



stampare file di testo in Java
Home » Forums » Jump Start

Risposte: 5   Ultima risposta inviata da: hunter32 (15-feb-2008 15.06)

 Rispondi  Crea un nuovo Topic  Cerca
 
  Lista dei Topic
 
hunter32

Messaggi inviati:3
Registrato: gen, 2008

stampare file di testo in Java Inviato:24-gen-2008 21.46
Rispondi
per stampare un certo file dataTMP.txt ho usato la seguente porzione di codice:

String filename = "dataTMP.txt";
PrintRequestAttributeSet printAttribute = new HashPrintRequestAttributeSet();
DocFlavor tipoDoc = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintService printService[] = PrintServiceLookup.lookupPrintServices(tipoDoc, printAttribute);
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, tipoDoc, printAttribute);
if (service != null)
{
DocPrintJob stampa = service.createPrintJob();
FileInputStream dataTMP = new FileInputStream(filename);
DocAttributeSet docAttribute = new HashDocAttributeSet();
Doc doc = new SimpleDoc(dataTMP, tipoDoc, docAttribute);
stampa.print(doc, printAttribute);
Thread.sleep(10000);
}


il problema che se lo stampo su file riottengo un file con i dati del file di partenza invece se lo stampo su carta ottengo un foglio vuoto!
perch?

Grazie.


Re: stampare file di testo in Java Inviato: 25-gen-2008 17.23
Rispondi
Inserito da: ravemaster    Messaggi inviati: 153\ Registrato: set, 2003
Dai uno sguardo qui: http://www.mokabyte.it/2001/04/javaprint.htm


Re: stampare file di testo in Java Inviato: 25-gen-2008 20.05
Rispondi
Inserito da: hunter32    Messaggi inviati: 3\ Registrato: gen, 2008
L'avevo gi notato prima di postare....
Grazie ma non quello che sto cercando, l ti permette di stampare stringhe o tabelle (se ho ben capito) e non file. A parte il fatto che dopo aver fatto diversi tentativi falliti ho provato a scaricare il file sorgente e a compilare quello ma non ho ottenuto altro che:

Note: D:\Transfer\esercitazioni\Java\gennaio\realproject\Printer.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.


dal processo di compilazione...
Dato che sono alle prime armi pensavo fosse per i troppi metodi "appendTable" ma anche dopo aver lasciato solo quello che mi interessava l'errore s' ripetuto.


Re: stampare file di testo in Java Inviato: 30-gen-2008 14.42
Rispondi
Inserito da: ravemaster    Messaggi inviati: 153\ Registrato: set, 2003
Beh? E qual' il problema? Leggi il file e metti il contenuto in una stringa.

Per quanto riguarda il messaggio che ti appare non un errore. E' un warning dovuto al fatto che nella classe (scritta tempo fa) non si fa uso dei Generics:

http://www.mokabyte.it/2004/12/generics-1.htm


Re: stampare file di testo in Java Inviato: 28-gen-2008 12.01
Rispondi
Inserito da: yosemite    Messaggi inviati: 77\ Registrato: lug, 2007
Ho la soluzione al tuo problema o almeno spero, di seguito trovi il codice che ho utilizzato per stampare un file di testo .txt, ho preso la classe Printer che ti ha segnalato ravemaster apparsa in un articolo su mokabyte e ho tolto alcune cose che non ti servono:
[code] //Classe Printer /** * This class provides some facilities to menage the print job * * @author Mario Fusco */ import java.awt.*; import java.util.*; import java.awt.print.*; public class Printer { PrinterJob pj; PageFormat pf; // The font used to print the current item Font font; FontMetrics fm; // The Graphics where the items to print will be painted Graphics graphics; // Holds the sequence of items to print Vector itemsToPrint = new Vector(); /** * The constructor */ public Printer() { // create a printjob pj = PrinterJob.getPrinterJob(); // get the default page pf = pj.defaultPage(); // Print an empty book // this trick is used to communicate with the printer and obtain the Graphics object // where the items to print will be painted Book dummyBook = new Book(); dummyBook.append(new DummyPage(), new PageFormat()); pj.setPageable(dummyBook); try { pj.print(); } catch (PrinterException pe) { pe.printStackTrace(); } } /** * Send to the printer the current graphics */ public void print() { try { pj.setPageable(getPages()); if (pj.printDialog()) pj.print(); } catch (PrinterException pe) { pe.printStackTrace(); } } /** * Set the font in which the next text appended to the job will be printed * * @param font The new font */ public void setFont(Font font) { this.font = font; } /** * Clear the current graphics and add a new String of text * * @param text The text to be printed */ public void setText(String text) { itemsToPrint = new Vector(); itemsToPrint.add(new TextToPrint(text, font)); } /** * Add a new String of text to the current job * * @param text The text to be printed */ public void appendText(String text) { itemsToPrint.add(new TextToPrint(text, font)); } /** * Return the book to be printed */ private Book getPages() { Book book = new Book(); Vector currentPage = new Vector(); // Get the bounds of a page int yLimit = (int)pf.getImageableHeight(); int xLimit = (int)pf.getImageableWidth(); // This point holds the bottom left corner angle position of the row of text to print int currX = 0; int currY = 0; // Put all the the items to print in the page for (int i = 0; i < itemsToPrint.size(); i++) { TextToPrint text = (TextToPrint)itemsToPrint.elementAt(i); currY = printText(text, book, currentPage, currY, xLimit, yLimit); } if (currentPage.size() > 0) book.append(new Page(currentPage), pf); return book; } /** * Put a block of text in the book to be printed * * @return the y position where the next block of text or table should begin */ private int printText(TextToPrint text, Book book, Vector currentPage, int currY, int xLimit, int yLimit) { // set the font used to print this text graphics.setFont(text.font); // Get the FontMetrics for the current Font fm = graphics.getFontMetrics(); int rowHeight = fm.getHeight(); // If a new page is beginning shift the cursor in the bottom position of the first row if (currY == 0) currY = rowHeight; // Tokenize the test to be printed in row StringTokenizer st = new StringTokenizer(text.text, "\n", true); // Remember is the last row printed is empty or not boolean emptyRow = true; while (st.hasMoreTokens()) { String currentRow = st.nextToken(); // If the row is empty move down the point of a distance equal to the row height if (currentRow.equals("\n")) { if (emptyRow) { currY += rowHeight; // If the page is finished save it in the book and begin a new one if (currY >= yLimit) { book.append(new Page((Vector)currentPage.clone()), pf); currentPage.removeAllElements(); currY = rowHeight; } } else emptyRow = true; } else { // the row isn't empty emptyRow = false; // split the current block of text in more row to fit it in the page Enumeration rows = splitString(currentRow, xLimit).elements(); // Print the text a row at time while (rows.hasMoreElements()) { currentPage.add(new StringToPrint((String)rows.nextElement(), text.font, (int)pf.getImageableX(), (int)pf.getImageableY() + currY)); currY += rowHeight; // If the page is finished save it in the book and begin a new one if (currY >= yLimit) { book.append(new Page((Vector)currentPage.clone()), pf); currentPage.removeAllElements(); currY = rowHeight; } } } } return currY; } /** * Split a String in rows no longer than a given width * * @param stringToSplit The text to split * @param maxWidth The max width of a row * * @retrun a Vector of Strings, one for each row in which the original text is splitted */ private Vector splitString(String stringToSplit, int maxWidth) { Vector result = new Vector(); // if the width of the whole String is shorter that maxWidth return a Vector with only one item if (maxWidth >= fm.stringWidth(stringToSplit)) { result.add(stringToSplit); return result; } // divide the String in words StringTokenizer st = new StringTokenizer(stringToSplit, " "); String row = ""; while (st.hasMoreTokens()) { String word = st.nextToken(); // try to add the current word to the row if (maxWidth > fm.stringWidth(row + word)) { // the row is shorter that mawWidth row += word + " "; } else if (!row.equals("")) { // else add the row to Vector result.add(row); // and begin a new row row = word; } // if single word is larger than maxWidth if (maxWidth < fm.stringWidth(word)) { // split the word in its single charachters char[] chars = word.toCharArray(); row = ""; for (int i = 0; i < chars.length; i++) { if (maxWidth > fm.stringWidth(row + chars)) { row += chars; } else { result.add(row); row = "" + chars; } } } } // if the last row isn't empty add it to the Vector if (!row.equals("")) result.add(row); return result; } /** * This class implements a single page to print */ class Page implements Printable { // A Vector of the items that will be printed in this page private Vector text; /** * The contructor * * @param text The Vector of the items that will be printed in this page */ public Page(Vector text) { this.text = text; } /** * Implements the Printable interface */ public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException { g.setColor(Color.black); for (int i = 0; i < text.size(); i++) { if (text.elementAt(i) instanceof StringToPrint) { // draw a string in the page StringToPrint currentString = (StringToPrint)text.elementAt(i); g.setFont(currentString.font); g.drawString(currentString.theString, currentString.xPos, currentString.yPos); } else { // draw a line in the page LineToPrint currentLine = (LineToPrint)text.elementAt(i); g.drawLine(currentLine.x1, currentLine.y1, currentLine.x2, currentLine.y2); } } return Printable.PAGE_EXISTS; // print the page } } /** * An empty book used to communicate with the printer and obtain the Graphics object */ class DummyPage implements Printable { public DummyPage() { } /** * Implements the Printable interface */ public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException { graphics = g; return Printable.NO_SUCH_PAGE; } } class TextToPrint { public String text; public Font font; public TextToPrint(String text, Font font) { this.text = text; this.font = font; } } class StringToPrint { public String theString; public Font font; public int xPos; public int yPos; public StringToPrint(String s, Font f, int x, int y) { this.theString = s; this.font = f; this.xPos = x; this.yPos = y; } } class LineToPrint { int x1; int y1; int x2; int y2; public LineToPrint(int x1, int y1, int x2, int y2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; } } } //Fine Classe Printer //Classe Main per test import java.io.*; public class Main { Printer p =new Printer(); /** Creates a new instance of Main */ public Main() { makeData(); p.print(); } public void makeData() { try { FileInputStream stream = new FileInputStream("dataTemp.txt"); InputStreamReader reader = new InputStreamReader(stream); BufferedReader buffer = new BufferedReader(reader); String line; while ((line = buffer.readLine()) != null) p.appendText(line); buffer.close(); } catch(IOException e){ System.exit(0); } } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Main m=new Main(); } } //Fine classe Main [/code]

Quando compili ti dar questo messaggio:

Recompile with -Xlint

ma non un errore una info, io ho provato e funziona.

Ciao Andrea


Re: stampare file di testo in Java Inviato: 15-feb-2008 15.06
Rispondi
Inserito da: hunter32    Messaggi inviati: 3\ Registrato: gen, 2008
Grazie per l'aiuto!


 
  Lista dei Topic      Inizio pagina
 




banner

Forum Home | Login | Cerca

[ MokaForum basato su Jive Forums ]
MokaByte® è un marchio registrato da MokaByte s.r.l.
Java® Jini® e tutti i nomi derivati sono marchi registrati da Sun Microsystems.
Tutti i diritti sono riservati. E' vietata la riproduzione anche parziale.
Per comunicazioni inviare una mail a info@mokabyte.it