Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1485 connectés 

  FORUM HardWare.fr
  Programmation

  [JAVA] Impression

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] Impression

n°83341
yop
Posté le 20-12-2001 à 14:29:40  profilanswer
 

Bonjour a tous,
 
   Je cherche un logiciel, ( de preference gratuit) qui permettrait de faire des impressions en java, telque crystal report en VB.
 
   Si y a des connaiseurs, suis preneur.

mood
Publicité
Posté le 20-12-2001 à 14:29:40  profilanswer
 

n°83352
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 20-12-2001 à 14:45:03  profilanswer
 

il y a une api pour ça. Si tu veux imprimer depuis un prog java, cherche dans les projets sur open source ...
 
Sinon tu peux le programmer toi meme mais je te préviens, c'est hard ...


---------------
What is popular is not always right, what is right is not always popular :D
n°83413
veryfree
Posté le 20-12-2001 à 15:49:14  profilanswer
 

look
/*
 * PrintText.java - Short Description
 * Copyright (C) 1999 Scot Bellamy, ACTS, Inc.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
 
package org.jext.print;
 
import java.util.*;
import java.awt.print.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.font.*;
import javax.swing.*;
import javax.swing.text.*;
 
 
/**
 * A simple printing class to handle basic text printing.
 * Accepts an array of Strings or a PlainDocument and
 * prints all the lines contained there in.  Each String
 * in the array is assumed to be a separate line.
*/
public class PrintText
{
 
  private int numberOfpages_ = 0; // The number of pages
  private Book pages_ = new Book(); // This holds each page
  private int wrapOffset_ = 0; // Used to determine where to begin a wrapped line.
  private String docTitle_; // Used for document title (i.e. file name) when including the page header
  private String[] text_; // Text to print.
  private PrintingOptions printOptions_; // Print options (i.e. font, print header, etc.)
  private boolean softTabs_ = true; // Indicates whether soft or hard tabs are used.
  private int tabSize_ = 4; // Tab stop if hard tabs are used.
 
  /**
   * Constructor - Accepts a plain document and uses default font.
   * No header information will be printed.
  */
  public PrintText(PlainDocument document)
  {
    this(document, "", new PrintingOptions(), false, 4);
  }
 
  /**
   * Constructor - Accepts a plain document as well as  other print options,
   * including font, page title, and header indicator (true if printing header, false otherwise).
  */
  public PrintText(PlainDocument document, String docTitle, PrintingOptions printOptions, boolean softTabs, int tabSize)
  {
    printOptions_ = printOptions;
    softTabs_ = softTabs;
    tabSize_ = tabSize;
 
    if (docTitle != null)
    {
      docTitle_ = docTitle;
    } else {
      // If a new doc and no title, set docTitle to "New Document"
      docTitle_ = "New Document";
    }
 
    //  Get Root element of the document
    Element root = document.getDefaultRootElement();
 
    //get the number of lines (i.e. child elements)
    int count = root.getElementCount();
 
    //Allocate the array
    String lines[] = new String[count];
 
    Segment segment = new Segment();
 
    // Get each line element, get its text and put it in the string array
    for (int i = 0; i < count; i++)
    {
      Element lineElement = (Element) root.getElement(i);
      try
      {
        document.getText(lineElement.getStartOffset(), lineElement.getEndOffset() - lineElement.getStartOffset(),
                segment);
        lines[i] = segment.toString();
      }
      catch (BadLocationException ble)
      {
      } // Nothing gets added to the Array if there is a bad location
    }
    text_ = lines;
    printTextArray();
  }
 
 
  /**
   * Constructor - accepts an array of Strings, uses the default font, no header.
  */
  PrintText(String[] text)
  {
    printOptions_ = new PrintingOptions();
    text_ = text;
    printTextArray();
  }
 
  /**
   * Constructor - accepts an array of Strings and a font, no header.
  */
  PrintText(String[] text, Font font)
  {
    printOptions_ = new PrintingOptions();
    text_ = text;
    printTextArray();
  }
 
 
  /**
   * Where the print processing begins.
  */
  void printTextArray()
  {
    PageFormat pgfmt = printOptions_.getPageFormat();
    Font pageFont = printOptions_.getPageFont();
    try
    {
      PrinterJob job = PrinterJob.getPrinterJob(); // create a printjob
      //            pgfmt = job.pageDialog(pgfmt);                  // set a page format. Comment this if you do not want this to show
      //            pgfmt = job.validatePage(pgfmt);                // make sure the pageformat is ok
 
      text_ = removeEOLChar();
 
      if (printOptions_.getPrintLineNumbers() == true)
      {
        text_ = addLineNumbers();
      }
      if (printOptions_.getWrapText() == true)
      {
        text_ = wrapText();
      }
 
      pages_ = pageinateText(); // do the pagination
 
      try
      {
        job.setPageable(pages_); // set the book pageable so the printjob knows we are printing more than one page (maybe)
        if (job.printDialog())
        {
          job.print(); // print.  This calls each Page object's print method
        }
      }
 
      // catch any errors and be as ambiguous about them as possible :)
      catch (Exception e)
      {
        JOptionPane.showMessageDialog(null, "Printer Error", "Error", JOptionPane.OK_OPTION);
      }
    }
    catch (Exception e)
    {
      JOptionPane.showMessageDialog(null, "Printer Error", "Error", JOptionPane.OK_OPTION);
    }
  }
 
  /**
   * Eliminates end of line characters
  */
  private String[] removeEOLChar()
  {
    String temp1, temp2, temp3;
    int lineCount = text_.length;
    String [] newText = new String[lineCount];
    int offset = 0;
 
    for (int i = 0; i < lineCount; i++)
    {
      if (text_[i].length() == 1)
      {
        newText[i] = " ";
      }
      else
      {
        temp1 = text_[i].substring(text_[i].length() - 2, text_[i].length() - 1);
        temp2 = text_[i].substring(text_[i].length() - 1, text_[i].length());
        if (temp1.compareTo("\r" ) == 0 || temp1.compareTo("\n" ) == 0)
        {
          offset = 2;
        }
        else if (temp2.compareTo("\r" ) == 0 || temp2.compareTo("\n" ) == 0)
        {
          offset = 1;
        }
        else
        {
          offset = 0;
        }
        temp3 = text_[i].substring(0, text_[i].length() - offset);
 
        // Process tabs.  Assume tab stops.
        StringBuffer temp4 = new StringBuffer();
        int length = temp3.length();
        for (int j = 0; j < length; j++)
        {
          if ("\t".equals(temp3.substring(j, j + 1)) == true)
          {
            // Calcualte the numbe of spaces to the tab stop.
            int numSpaces = (temp4.length()) % tabSize_;
 
            if (numSpaces == 0)
            {
              numSpaces = tabSize_;
            }
            for (int x = 0; x < numSpaces; x++)
            {
              temp4.append(" " );
            }
          }
          else
          {
            temp4.append(temp3.substring(j, j + 1));
          }
        }
        newText[i] = temp4.toString();
      }
    }
    return newText;
  }
 
 
 
  /**
   * Addes line numbers to the beginning of each line.
  */
  private String[] addLineNumbers()
  {
    int numLines = text_.length;
    int totalNumSpaces = 0;
    String temp;
    String [] newText = new String[numLines];
 
 
    // Get the total number of digits in last line number
    // So that spacing and alignment can be done properly.
    Integer lines = new Integer(numLines);
    temp = lines.toString();
    totalNumSpaces = temp.length();
 
    // Set the wrap offset so that we can start wrapped lines in the proper place.
    wrapOffset_ = totalNumSpaces + 3;
 
 
    for (int i = 0; i < numLines; i++)
    {
      StringBuffer num = new StringBuffer();
      num.append(i + 1);
      int numLen = num.length();
 
      StringBuffer lineNum = new StringBuffer();
 
      for (int j = 0; j < (totalNumSpaces - numLen); j++)
      {
        lineNum.append(' ';);
      }
      lineNum.append(num.toString());
 
      newText[i] = lineNum.toString() + ".  " + text_[i];
    }
 
    return newText;
 
  }
 
  /**
   * Creates a new array of lines that all fit the width of the page.
  */
  private String[] wrapText()
  {
    String currentLine = null;
    String tempString = null;
    Vector temp = new Vector();
    int lineCount = text_.length;
    int newLineCount = 0;
    StringBuffer wrapSpaces = new StringBuffer("" );
    int i = 0;
    PageFormat pgfmt = printOptions_.getPageFormat();
    Font pageFont = printOptions_.getPageFont();
    double pageWidth = pgfmt.getImageableWidth();
 
    for (i = 0; i < wrapOffset_; i++)
    {
      wrapSpaces.append(' ';);
    }
 
    for (i = 0; i < lineCount; i++)
    {
      currentLine = text_[i];
      while (pageFont.getStringBounds(currentLine,
              new FontRenderContext(pageFont.getTransform(), false, false)).getWidth() > pageWidth)
      {
        int numChars = (int)(currentLine.length() * pageWidth / pageFont.getStringBounds(currentLine,
                new FontRenderContext(pageFont.getTransform(), false, false)).getWidth());
        temp.add(currentLine.substring(0, numChars));
        currentLine = wrapSpaces.toString() + currentLine.substring(numChars, currentLine.length());
      }
      temp.add(currentLine);
    }
 
    newLineCount = temp.size();
    String [] newText = new String[newLineCount];
 
    for (int j = 0; j < newLineCount; j++)
    {
      newText[j] = (String) temp.get(j);
    }
 
 
    return newText;
 
  }
 
 
 
  /**
   * The pagination method, Paginate the text onto Printable page objects
  */
  private Book pageinateText()
  {
 
    Book book = new Book();
    int linesPerPage = 0; // lines on one page
    int currentLine = 0; // line I am  currently reading
    int pageNum = 0; // page #
    PageFormat pgfmt = printOptions_.getPageFormat();
    Font pageFont = printOptions_.getPageFont();
    int height = (int) pgfmt.getImageableHeight(); // height of a page
    int pages = 0; // number of pages
 
    linesPerPage = height / (pageFont.getSize() + 2); // number of lines on a page
    pages = ((int) text_.length / linesPerPage); // set number of pages
    String[] pageText; // one page of text
    String readString; // a temporary string to read from master string
 
    convertUnprintables(); // method to keep out errors
 
    if (printOptions_.getPrintHeader() == true)
    {
      linesPerPage = linesPerPage - 2;
    }
 
    while (pageNum <= pages)
    {
 
      pageText = new String[linesPerPage]; // create a new page
      for (int x = 0; x < linesPerPage; x++)
      {
        try
        {
          readString = text_[currentLine]; // read the string
        }
        catch (ArrayIndexOutOfBoundsException e)
        {
          readString = " ";
        }
        pageText[x] = readString; // add to the page
 
        currentLine++;
      }
      pageNum++; // increase the page number I am on
      book.append(new Page(pageText, pageNum), pgfmt); // create a new page object with the text and add it to the book
 
    }
    return book; // return the completed book
 
  }
 
  /**
   * Converts unprintable things to a space.  stops some errors.
  */
  private void convertUnprintables()
  {
    String tempString;
    int i = text_.length;
    while (i > 0)
    {
      i--;
      tempString = text_[i];
      if (tempString == null || "".equals(tempString))
      {
        text_[i] = " ";
      }
    }
  }
 
  /**
   * An inner class that defines one page of text based
   * on data about the PageFormat etc. from the book defined
   * in the parent class
  */
  class Page implements Printable
  {
 
    private String[] pageText_; // the text for the page
    private int pageNumber_ = 0;
 
    Page(String[] text, int pageNum)
    {
      this.pageText_ = text; // set the page's text
      this.pageNumber_ = pageNum; // set page number.
    }
 
    /**
     * Defines the Printable print method, for printing a Page
    */
    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException // the printing part
 
    {
      int pos;
      int posOffset = 1;
      double pageWidth = pageFormat.getImageableWidth();
      Font pageFont = printOptions_.getPageFont();
 
      if (printOptions_.getPrintHeader() == true)
      {
        StringBuffer header = new StringBuffer();
        StringBuffer pageNumText = new StringBuffer();
        int i = 0;
        int headerPos = 0;
        int numSpaces = 0;
 
        Calendar date = Calendar.getInstance();
        header.append(date.get(Calendar.DAY_OF_MONTH));
        header.append('/';);
        header.append(date.get(Calendar.MONTH) + 1);
        header.append('/';);
        header.append(date.get(Calendar.YEAR));
 
        pageNumText.append("Page " );
        pageNumText.append(pageNumber_);
 
        int xPos;
        double margin = (pageFormat.getWidth() - pageFormat.getImageableWidth()) / 2;
        graphics.setFont(printOptions_.getHeaderFont());
        graphics.setColor(Color.black);
        pos = (int) pageFormat.getImageableY() + (printOptions_.getHeaderFont().getSize() + 2);
        graphics.drawString(header.toString(), (int) pageFormat.getImageableX(), pos); // draw a line of text
        xPos = (int)((pageFormat.getWidth() / 2) - (graphics.getFontMetrics().stringWidth(docTitle_) / 2));
        graphics.drawString(docTitle_, xPos, pos);
        xPos = (int)(pageFormat.getWidth() - margin - graphics.getFontMetrics().stringWidth(pageNumText.toString()));
        graphics.drawString(pageNumText.toString(), xPos, pos);
        posOffset = 3;
      }
 
      graphics.setFont(pageFont); // Set the font
      graphics.setColor(Color.black); // set color
 
      for (int x = 0; x < (pageText_.length); x++)
      {
        pos = (int) pageFormat.getImageableY() + (pageFont.getSize() + 2) * (x + posOffset);
        graphics.drawString(this.pageText_[x], (int) pageFormat.getImageableX(), pos); // draw a line of text
      }
 
      return Printable.PAGE_EXISTS; // print the page
    }
 
  }
 
  /**
   * An inner class that defines one section of printable text.
   * This allows the flexability to assign different fonts to
   * individual words or phrases (i.e. for headers/footers or
   * Syntax highlighting (pretty print).
  */
  class PrintableText
  {
    private Font font_;
    private boolean newLine_ = true;
    private String text_;
 
    PrintableText()
    {
    }
 
    PrintableText(String text, Font font, boolean newLine)
    {
      text_ = text;
      font_ = font;
      newLine_ = newLine;
    }
 
    String getText()
    {
      return text_;
    }
 
    void setText(String text)
    {
      text_ = text;
    }
 
    Font getFont()
    {
      return font_;
    }
 
    void setFont(Font font)
    {
      font_ = font;
    }
 
    boolean isNewLine()
    {
      return newLine_;
    }
 
    void setNewLine(boolean newLine)
    {
      newLine_ = newLine;
    }
  }
}
 
// End of PrintText.java

n°83414
veryfree
Posté le 20-12-2001 à 15:50:48  profilanswer
 

jvien d imaginé quelle taille peux bien avoir la base de donnée de ce forum  :heink:

n°83435
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 20-12-2001 à 16:24:51  profilanswer
 

veryfree a écrit a écrit :

jvien d imaginé quelle taille peux bien avoir la base de donnée de ce forum  :heink:  




 :lol:  :lol:  :lol:  
 
 :hello:


---------------
What is popular is not always right, what is right is not always popular :D
n°83565
yop
Posté le 21-12-2001 à 08:05:30  profilanswer
 

merci veryfree,
Mais je ne peu imprimer qu'un PlainDocument, Or j'ai des images, ...

n°83738
veryfree
Posté le 21-12-2001 à 17:52:07  profilanswer
 

yop a écrit a écrit :

merci veryfree,
Mais je ne peu imprimer qu'un PlainDocument, Or j'ai des images, ...  




t a reussi a imprimé qq chose avec ca?
pq moi j ai po essayé...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [JAVA] Impression

 

Sujets relatifs
[Java] petite JVM ?[java] debutant intêret des interfaces ?
[PHP] Impression - ImageDesinstallation de JAVA JRE 1.3.1 linux
Java erreurEteindre un PC avec un programme JAVA ???
[Java] Classes multiples limiter le nombre d'instances d'une classe[JAVA] impression du contenu d'un JEditorPane
Impression en javaImpression en java?
Plus de sujets relatifs à : [JAVA] Impression


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR