www.Gerhard-Raabe.de
  Java Package
 
 
Back   Print.PrintImages
 
Copyright: Das nachfolgende Package ist frei verfügbar solange es nicht kommerziell verwendet wird! Falls es so wie veröffentlicht, in Teilen oder abgewandelt zum Einsatz kommt, würde ich mich sehr über eine kurze E-Mail freuen.
 
Package-Name: Print.PrintImages
 
Enthaltende Klassen: Print.PrintImages.CPrintImageDialog
Print.PrintImages.CPrintImagePreview
Print.PrintImages.CPrintImagePrinterAdapter
Print.PrintImages.CPrintImageZoomAdapter
Print.PrintImages.CPrintImages
Print.PrintImages.CPrintImage
Print.PrintImages.CPrintGrafik
Print.PrintImages.CPrintGrafikText
 
Anwendung: Mit dem in diesem Package enthaltendem Dialog lassen sich beliebig viele Image-Objekt auf einer druckfähigen Seite positionieren und ausdrucken. Dabei kann jedes Image für sich individuell mit der Mouse und über Eingabefelder in seiner Größe und Positionierung modifiziert werden. Darüberhinaus kann die Vorschau verkleinert und gezoomt werden.

Zusätztlich können auch Textfelder (z.B. für Überschriften) definiert, positioniert und modifiziert werden

Vor dem Ausdruck können über die entsprechenden Systemdialoge sowohl das Seitenformat als auch der Drucker ausgewählt werden.
 
Beschreibung: Grundlagen zum Drucken in Java:

 - Printable:

Das Interface Printable ist in dem Paket java.awt.print definiert und stellt dem Entwickler nur eine einzige Methode zur Verfügung:

  public int print(Graphics g, PageFormat pageFormat, int PageIndex)  

Diese Methode wird von dem aktuellen Druckauftrag genutzt um einzelne Seiten auszudrucken. Über die Graphics und PageFormat Objekte erhält die Applikation alle benötigten Informationen und Werkzeuge um die eigenen Inhalte auf die Seite zu bringen. Über die pageIndex Variable kann die Applikation entscheiden, wieviele Seiten gedruckt werden sollen. Solange noch Daten zu drucken sind, wird am Ende der Methode PAGE_EXISTS zurückgeliefert. Erst wenn ein Seitenindex übergeben wird, für den keine Inhalte mehr zur Verfügung stehen wird NO_SUCH_PAGE zurückgeliefert.


  public class CPrintablePage implements Printable
{
      public int print(Graphics g, PageFormat pageFormat, int PageIndex)
            throws PrinterException
      {
            int l_Result = NO_SUCH_PAGE;
            if (pageIndex < 3)
            {
                  g.drawString("Hello World");
                  l_Result = PAGE_EXISTS;
            }
      }
}
 

Das obige Beispiel druckt drei Seiten mit "Hello World" aus. Beendet wird der Druck, wenn der Seiten-Index größer drei wird und die Applikation dann NO_SUCH_PAGE zurückliefert.


 - PrinterJob:

Das Java-Package java.awt.print enthält die Klasse PrinterJob, die sich sehr gut zur Druckersteuerung eignet. Sie wird wie folgt initalisiert:

  PrinterJob l_PrinterJob = PrinterJob.getPrinterJob();  

Ein von dem Interface Printable abgeleitete Klasse kann mittels setPrintable an die PrinterJob-Klasse übergeben werden und dann mittels der Methode print gedruckt werden kann:

  public void setPrintable(Printable painter)  
  public void setPrintable(Printable painter, Pageformat format)  
  public void print()  

Beispiel:

        .
      .
      .
CPrintablePage l_PrintablePage = new CPrintablePage();
      .
      .
      .
PrinterJob l_PrinterJob = PrinterJob.getPrinterJob();
try
{
      l_PrinterJob.setPrintable(l_PrintablePage);
      l_PrinterJob.print();
}
catch (PrinterException p)
{
      JOptionPane.showMessageDialog(this, p.getMessage(), "Printer-Error",
            JOptionPane.ERROR_MESSAGE);
            .
            .
            .
}
      .
      .
      .
 


 - Seitenformat:

Für das Seitenformat kann der Methode setPrintable zusätzlich auch die Klasse PageFormat übergeben werden. PageFormat definiert z.B. die Seitengröße, Seitenausrichtung, etc. Mit der Methode defaultPage kann aus PrinterJob-Instance die Default-Einstellungen der aktuellen Druckseite ermittelt werden. Mit pageDialog wird ein System-Dialog aufgerufen, indem die Seiteneinstellungen modifiziert werden können:

  public PageFormat defaultPage()  
  public PageFormat defaultPage(PageFormat page)  
  public PageFormat pageDialog(PageFormat page)  
  public PageFormat pageDialog(PrintRequestAttributeSet attributes)  

Beispiel:

        .
      .
      .
PrinterJob l_PrinterJob = PrinterJob.getPrinterJob();
PageFormat l_PageFormat = l_PrinterJob.defaultPage();
      .
      .
      .
l_PageFormat = l_PrinterJob.pageDialog(l_PageFormat);
      .
      .
      .
 


 - Druckerauswahl:

Zum Aufruf des Systemseitigen Druckerauswahl-Dialogs stellt PrinterJob die Methode printDialog zur Verfügung:

  public boolean printDialog()  
  public boolean printDialog(PrintRequestAttributeSet attributes)  

Beispiel:

        .
      .
      .
PrinterJob l_PrinterJob = PrinterJob.getPrinterJob();
      .
      .
      .
boolean l_Return = m_PrinterJob.printDialog();
      .
      .
      .
 


Der Dialog CPrintImageDialog:

CPrintImageDialog

An PrintImageDialog kann die von ArrayList abgeleitete Klasse CPrintImages übergeben werden. Diese kann eine beliebige Anzahl von Image-Objekten und Textblöcken enthalten. CPrintImages enthält eine Liste von der Klasse CPrintImage abgeleiteten Objekten. Von CPrintImage sind die Klassen:

  • CPrintGrafik   (zur Darstellung von Image-Objekten)
  • CPrintGrafikText   (zur Darstellung von Textzeilen)

    abgeleitet. Diese Klassen können beliebig in der Klasse CPrintImages zusammengestellt und an PrintImageDialog zur Voransicht und zum Ausdruck übergeben werden.

    Die Werte der von CPrintImage abgeleiteten Klassen können mit dem Package IniFile in einem INI-File gesichert werden. Dazu stellt CPrintImage die Methode setIniFileSection zur Verfügung, an das eine CIniFileSection-Klasse übergeben werden kann. Die einzelnen Keys sind fest definiert und werden im Abschnitt Methoden beschrieben. Nach der Modifizierung im Dialog können die Werte über die Methode setValuesToIniFile der Klasse CPrintImages an die Klasse CIniFile übergeben werden.
     
    Methoden: Die Klasse CPrintImages:

    Enthält eine Liste der im Dialog CPrintImageDialog dazustellenden Objekte. Diese Objekte werden durch die Klasse CPrintImage representiert, die mittels der Methode add in der Liste aufgenmmen werden:

      public void add(CPrintImage PrintImage)  


    Die Klasse CPrintImage:

    Representiert ein im Dialog CPrintImageDialog dazustellendes Objekt (Listenelement in CPrintImages). Von dieser Klasse sind CPrintGrafik (für Image-Objekte) und CPrintGrafikText (für Textzeilen) abgeleitet:

      public CPrintGrafik(String label, Image image, int XPos, int YPos)  
      public CPrintGrafikText(String label, String Text, int XPos, int YPos)  


    Der Dialog CPrintImageDialog:

    Der Dialog CPrintImageDialog wird mittels des folgenden Konstruktors initalisiert und gestartet:

      public CPrintImageDialog(Frame owner, String Titel, CPrintImages PrintImages, double Zoom)  


    Speicherung der im Dialog-Werte im INI-File:

    Die Werte der von CPrintImage abgeleiteten Klassen können mit dem Package IniFile in einem INI-File gesichert werden. Dazu stellt CPrintImage die Methode setIniFileSection zur Verfügung, an das eine CIniFileSection-Klasse übergeben werden kann:

      public void setIniFileSection(CIniFileSection IniFileSection)  

    Nach Beendigung des Dialogs CPrintImageDialog können die Werte über die Methode setValuesToIniFile der Klasse CPrintImages an die Klasse CIniFile übergeben werden:

      public void setValuesToIniFile()  

    Die Key-Words innerhalb der Sektionen sind für die abgeleitenden Objekte wie folgt definiert:

      CPrintGrafik: CPrintGrafikText:  
      Visible Visible  
      X-Pos X-Pos  
      Y-Pos Y-Pos  
      X-Scale X-Scale  
      Y-Scale Y-Scale  
        Font-Name  
        Font-Size
        Bold  
        Italic  

     
    Beispiel: Das Beispiel entspricht dem obrigen Screen-Shot. Die Startwerte der dazustellenden Objekte werden aus einem INI-File gelesen. Nach Beendigung des Dialog CPrintImageDialog werden eventuelle Änderungen gesichet:

            .
          .
          .
    Image l_ImageFingerBoard = ...
    Image l_ImageFingerNotes = ...
          .
          .
          .
    CIniFile l_IniFile = new CIniFile();
    try
    {
          l_IniFile.load("FileName.ini");

          CPrintImages l_PrintImages = new CPrintImages();

          CPrintImage l_PrintImage;

          // Header
          l_PrintImage = new CPrintGrafikText("Header", "Test", 100, 20);
          l_PrintImage.setIniFileSection(
                      l_IniFile.getIniFileSection("Print Header", "Print Header"));
          l_PrintImages.add(l_PrintImage);

          // Finger-Board
          l_PrintImage = new CPrintGrafik("Finger-Board", l_ImageFingerBoard, 100, 100);
          l_PrintImage.setIniFileSection(
                      l_IniFile.getIniFileSection("Print Finger-Board", "Print Finger-Board"));
          l_PrintImages.add(l_PrintImage);

          // Finger-Board Notes
          l_PrintImage = new CPrintGrafik("Finger-Board Notes", l_ImageNotes, 20, 400);
          l_PrintImage.setIniFileSection(
                      l_IniFile.getIniFileSection("Print Finger-Board Notes", "Print Finger-Board Notes"));
          l_PrintImages.add(l_PrintImage);

          // Print Dialog
          l_PrintImageDialog = new CPrintImageDialog(this, "Print Finger-Board", l_PrintImages, 0.75);
          l_PrintImageDialog.show();

          l_PrintImages.setValuesToIniFile();
          if (l_IniFile.getChanged())
          {
                if (JOptionPane.showConfirmDialog(this,
                      "Do you want to save the printer settings?",
                      "Save Settings",
                      JOptionPane.YES_NO_OPTION,
                      JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION)
                {
                      l_IniFile.save("FileName.ini");
                }
          }
    }
    catch (IOException i)
    {
          JOptionPane.showMessageDialog(this, i.getMessage(), "IO-Error",
                JOptionPane.ERROR_MESSAGE);
                .
                .
                .
    }
          .
          .
          .
     

     
    Download:
    Next   *.class
    Next
      *.java
    439351 Besucher - seit dem 01.02.2005 - 00:00:00 - 1 Besucher online © 2004-2015 by Gerhard Raabe ##, ## ### #### - ##:##:##