Avatar billede trp79 Nybegynder
24. juni 2003 - 08:51 Der er 12 kommentarer og
2 løsninger

Udskrivning til fysisk printer

Hejsa,
Jeg kan se der er en del spørgsmål omkring udskrivning på en fysisk printer her på exp. Men jeg synes ikke rigtig jeg kan gennemskue det - nogle snakker om ren tekst udskrivning andre om component eller grafisk udskrivning.

Jeg har en grafisk brugergrænseflade, der indeholder en del data. Jeg har lagt et par screenshots her:
www.confunded.dk/TP/oversigt.JPG
www.confunded.dk/TP/stat.JPG

***********************************************************
For det første screenshot gælder det, at jeg gerne vil have lavet det sådan, at jeg kan udskrive al data omkring et firma, altså alt det, der er over seperator stregen.
Det der er under seperator stregen omhandler de person der er tilknyttet det markederede firma(altså det firma man se info omkring over seperatorstregen).

Jeg forestiller mig at jeg i JMenu baren har to elementer, en der hedder "udskriv firma-info" og der hedder "udskriv person-info"

***********************************************************

Ligeledes gælder det for det andet screenshot at jeg skal have udskrevet alle de data MAN KAN SE på skærmen, SAMT HELE JTABLEN.

***********************************************************

Hvordan får jeg udskrevet dette på min printer, således at det er stillet overskueligt op og således at alle informationer er med?

Alle informationerne har jeg gemt i 4 xml dokumenter. Disse bruger jeg som en db. Nå programmet kører henter jeg dataene fra xml dokumenter over i arraylist's.

Håber nogen kan hjælpe mig igang og frem til en løsning, mvh
Torben
Avatar billede jakoba Nybegynder
24. juni 2003 - 09:23 #1
Du har utvivlsomt hørt (til ulidelighed) at java er uafhængig af hvilken computer det skal køre på.
Her er et af de steder det ikke passer. Printere er højest forskellige. Og måden de bruges på fra diverse Operativsystemer vil også meget ofte variere.

En konsekvens af det er at det programmel du laver til udskrift nok bør ligge i et modul for sig selv, så det er nemt at udskifte når den næste kunde viser sig at have en anden printer på et andet operativsystem.

Forbindelsen imellem det modul og hovedprogrammet, og også imellem det modul og operativsystemet bør så være så enkel og forståelig som mulig. Og du bør finde en 'fællesnævner' i form af et dataformat som Java kan generere og som du kan forvente eksisterende programmel (printerdrivere osv) kan hitte ud af at udskrive på en printer.

Du kunne fx bruge 'tekst fil' som fællesnævner. De allerfleste printere kan hitte ud af at udskrive sådan en. Det job du skal udføre i java bliver så at transformere den information du vil udskrive til en sekvens af bogstaver. Det er nogenlunde til at hitte ud af.

Men hvis du ønsker at udskrive grafiske elementer duer det ikke. så må du finde en anden fællesnævet. Du kunne fx generere et Word dokument (til windows systemer) eller en billedfil (til alle systemer, men det fylder ENORMT).

Jeg ville nok vælge at generere en tekst fil. Der findes stadig en del linieskrivere (ekstremt hurtig skrivemaskine der ikke kan skrive andet en Courier tekst. de er fine når der skal udskrives fakruraer med gennemslag på fortrykt papir).

mvh JakobA
Avatar billede trp79 Nybegynder
24. juni 2003 - 09:57 #2
Hej Jakob,
Det er så en kammerat jeg har udviklet det dersens kundekartoteks program for. Planen er pt. ikke at distribuere programmet videre eller at sælge det.

Det med at lave moduler lyder meget spændende, så jeg kunne jo passende starte med at lave et, der smider informationerne over i en tekstfil som du foreslår. Er det i det tilfælde muligt at lave noget noget tekst fed eller ændre på skrift størrelsen?

Mener du man ville kunne præsentere dataene mere overskueligt og pænere ved at genererer et Word dokument? Hvis det kunne være aktuelt, hvor svært er det så? Jeg er ikke den store java-haj, men har da noget gå-på-mod.
Avatar billede jakoba Nybegynder
24. juni 2003 - 10:23 #3
I en standard tekstfil er der ingen fontinformation overhovedet. alt  den slags får printeren eller operativsystemet lov til at bestemme med defaultværdier.

for at generere et Word dokument skal du lige lære alle detaljerne i Word's formattering udenad. Det er et pænt stort projekt :-))

et godt kompromis kunne være at generere et HTML dokument det giver dig nem mulighed for forskellige skrifttyper og sågar billeder, men proceduren ved udskrift ville blive en smule mere kompliceret.

din knap med 'PRINT* bliver til 3 handlinger:
1)  knap med 'generer udskriftsfil'.
2)  åben den genererede html-fil i en browser.
3)  udskriv fra browseren.

Det er ikke så uhyrligt som det lyder selvom der nu skal gøres hele tre ting istedet for blot een. Mange udskrifter er blot for at arkivere en status eller få overblikket og det har man jo med ved første eller andet trin. ( og uden at spilde papir :-)

mvh JakobA
Avatar billede trp79 Nybegynder
24. juni 2003 - 10:33 #4
Okey, jeg tror jeg prøver med:
1)  knap med 'generer udskriftsfil'.
2)  åben den genererede html-fil i en browser.
3)  udskriv fra browseren.

1 & 2 mener jeg nok jeg skulle kunne lave.  Men hvordan kalder jeg "print" i browseren? Altså uden at brugeren skal trykke ctrl+p eller noget i den stil?
Avatar billede jakoba Nybegynder
24. juni 2003 - 11:00 #5
Det kan du såvidt jeg ved ikke. Min hensigt var at lade det være brugerens job.
Avatar billede trp79 Nybegynder
24. juni 2003 - 11:00 #6
Du har vel ikke en ide til hvordan jeg genererer en tabel i html? Jeg kender ikke meget til html udover <b><i><u>.

Mine tanker er at tabllen skal se således ud:

    Budget    Oms
1990  xxx    xxx
1991  ...    ...
....
Avatar billede trp79 Nybegynder
24. juni 2003 - 11:01 #7
Okey, det er heller ikke noget problem. Mon ikke han kan overkomme at trykke ctrl+p ;o)
Avatar billede jakoba Nybegynder
24. juni 2003 - 11:01 #8
men lad spørgsmålet stå. Hvis der ER muligt kan en rigtig haj som fx arne-v eller disky nok fortælle dig hvordan :-))
Avatar billede jakoba Nybegynder
24. juni 2003 - 11:07 #9
Tabeller sammensættes med 3 forskellige html kommantoer
<table> ... </table>  alt indei er tabellen
<tr> ... </tr>        tabelrække (dvs en vandret række tabelceller)
<td> ... </td>        en enkelt tabelcelle

dit eksempel:
<table>
  <tr>
    <td>&nbsp;</td>  <!-- der skal være lige mange celler i hver række -->
    <td>budget</td>
    <td>Oms</td>
  </tr>
  <tr>
    <td>1990</td>
    <td>xxx</td>
    <td>yyy</td>
  </tr>
  <tr>
    <td>1991</td>
    <td>xxx</td>
    <td>yyy</td>
  </tr>
</table>

mvh JakobA
Avatar billede tmo Nybegynder
26. juni 2003 - 11:33 #10
En lille kommentar. Måske du skulle overveje at anvende XML. Her kan du med FOP og XSL skabe PDF som de fleste printere kan udskrive.(http://xml.apache.org/fop/index.html)

Desuden er det nemt at skabe output i andre formater fx. HTML. med XSL
Avatar billede trp79 Nybegynder
26. juni 2003 - 13:34 #11
Jeg har nu fået samlet mig en klasse til at håndterer udskrivningen - i form af genereringen af et html dokument.

-->jakoba
Jakob du hjalp mig jo egentlig frem til en løsning, så pointene er vel dine...


Hvis andet skulle kunne bruge en sådan klasse, så er den her. Den er dog ikke optimal endnu, men virker efter hensigten:

import java.io.*;
import java.util.*;
import java.text.*;

public class Print implements Serializable
{

    String navn;
    String statusHentFirma="";
    String statusHentKP="";
    String statusHentOms="";
    String statusHentBudget="";
    int totalBudget = 0;
    int totalOms = 0;
    List kundeListe = new ArrayList();
    DateFormat df = new SimpleDateFormat("MMM-yyyy");
    Date d;
    Omsaetning omsTemp;
    Budget budTemp;

    public Print()
    {
    }
    public void udskrivFInfoStartFil(PrintWriter outFile) throws IOException
    {
        outFile.println("<html>");
        outFile.println("<head>");
        outFile.println("<title>Udskrivning af Firma-info</title>");
        outFile.println("<style type=\"text/css\">");
        outFile.println("<!--");

        outFile.println("#infoboks {");
            outFile.println("background-color: #000000;");
            outFile.println("font-size: 12px;");
            outFile.println("}");
        outFile.println("#infoboks td {");
            outFile.println("background-color: #FFFFFF;");
            outFile.println("text-align: left;");
            outFile.println("vertical-align: top;");
            outFile.println("padding: 1px;");
            outFile.println("}");
        outFile.println("#infoboks th {");
            outFile.println("background-color: #CCCCCC;");
            outFile.println("}");

        outFile.println("body {");
            outFile.println("font-family: Arial, Helvetica, sans-serif;");
        outFile.println("}");
        outFile.println(".udskriv {");
        outFile.println("height: 250mm;");
        outFile.println("width: 180mm;");
        outFile.println("}");
        outFile.println("-->");
        outFile.println("</style>");
        outFile.println("</head>");
        outFile.println("<body onLoad=\"print(document)\">");
    }

    public void udskrivFInfo(PrintWriter outFile, Firma firma, ArrayList omsListe, ArrayList budgetListe, boolean adr1, boolean adr2, boolean adr3,boolean tlf,boolean fax,boolean email,boolean hjemmeside,boolean oprettet,boolean noter,boolean budgetoms) throws IOException
    {
                outFile.println ("<h2>"+firma.getNavn()+"</h2>"); // skriver linjerne ud til filen
                outFile.println ("<table width=\"100\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"udskriv\">");
                outFile.println ("    <tr>");
                outFile.println ("<td align=\"center\" valign=\"top\">");
                outFile.println ("    <table width=\"400\" border=\"0\" cellpadding=\"0\" cellspacing=\"1\" id=\"infoboks\">");
                if(adr1)
                {
                    outFile.println ("    <tr>");
                    outFile.println ("      <td width=\"21%\">Adr. 1:</td>");
                    outFile.println ("      <td width=\"79%\">"+firma.getAdresse1()+"</td>");
                    outFile.println ("    </tr>");
                }

                if(adr2)
                {
                    outFile.println ("     <tr>");
                    outFile.println ("        <td>Adr. 2:</td>");
                    outFile.println ("        <td>"+firma.getAdresse2()+"</td>");
                    outFile.println ("    </tr>");
                }

                if(adr3)
                {
                    outFile.println ("     <tr>");
                    outFile.println ("        <td>Adr. 3:</td>");
                    outFile.println ("        <td>"+firma.getAdresse3()+"</td>");
                    outFile.println ("    </tr>");
                }

                if(tlf)
                {
                    outFile.println ("     <tr>");
                    outFile.println ("        <td>Tlf:</td>");
                    outFile.println ("        <td>"+firma.getTlf()+"</td>");
                    outFile.println ("    </tr>");
                }

                if(fax)
                {
                    outFile.println ("     <tr>");
                    outFile.println ("        <td>Fax:</td>");
                    outFile.println ("        <td>"+firma.getFax()+"</td>");
                    outFile.println ("    </tr>");
                }

                if(email)
                {
                    outFile.println ("     <tr>");
                    outFile.println ("        <td>Email:</td>");
                    outFile.println ("        <td>"+firma.getEmail()+"</td>");
                    outFile.println ("    </tr>");
                }

                if(hjemmeside)
                {
                    outFile.println ("     <tr>");
                    outFile.println ("        <td>Hjemmeside:</td>");
                    outFile.println ("        <td>"+firma.getBy()+"</td>");
                    outFile.println ("    </tr>");
                }

                if(oprettet)
                {
                    outFile.println ("     <tr>");
                    outFile.println ("        <td>Oprettet:</td>");
                    outFile.println ("        <td>"+firma.getOprettet()+"</td>");
                    outFile.println ("    </tr>");
                }

                if(noter)
                {
                    outFile.println ("     <tr>");
                    outFile.println ("        <td>Noter:</td>");
                    outFile.println ("        <td>"+firma.getNoter()+"</td>");
                    outFile.println ("    </tr>");
                }


                    if(budgetoms)
                    {
                        outFile.println ("     <tr>");
                        outFile.println ("        <td>Budgetter & omsætninger:</td>");
                            outFile.println ("        <td>");
                                    outFile.println ("<br> <table width=\"300\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"1\" id=\"infoboks\">");
                                        outFile.println ("    <tr>");
                                        outFile.println ("      <td width=\"20%\">&nbsp;</td>");
                                        outFile.println ("      <th width=\"40%\">"+"Budget"+"</th>");
                                        outFile.println ("      <th width=\"40%\">"+"Omsætning"+"</th>");
                                        outFile.println ("    </tr>");

                                            HashMap omsHMap = getHashMapOms(omsListe, firma.getNavn());
                                            HashMap budgetHMap = getHashMapBudget(budgetListe, firma.getNavn());

                                            for(int y = getStartAar(omsListe, budgetListe, firma.getNavn()); y <= getSlutAar(omsListe, budgetListe, firma.getNavn()); y++)
                                            {
                                              Omsaetning oms = (Omsaetning)omsHMap.get(new Integer(y));
                                              Budget bud = (Budget)budgetHMap.get(new Integer(y));
                                              outFile.println ("    <tr>");
                                                outFile.println ("      <td>"+y+"</td>");
                                              if(bud != null)
                                              {
                                                outFile.println ("      <td>"+bud.getBudget()+"</td>");
                                                try{totalBudget+=Integer.parseInt(bud.getBudget());}
                                                catch(NumberFormatException e){System.out.println("År mangler budget: "+e);}
                                              }
                                              if(bud == null)
                                              {
                                                outFile.println ("      <td><font color=\"#FF0000\">"+"intet"+"</font></td>");
                                              }
                                              if(oms != null)
                                              {
                                                outFile.println ("      <td>"+oms.getOms()+"</td>");
                                                try{totalOms+=Integer.parseInt(oms.getOms());}
                                                catch(NumberFormatException e){System.out.println("År mangler omsaetning: "+e);}
                                              }
                                              if(oms == null)
                                              {
                                                outFile.println ("      <td><font color=\"#FF0000\">"+"intet"+"</font></td>");
                                              }
                                              outFile.println ("    </tr>");

                                            }

                                                    outFile.println ("    <tr>");
                                                    outFile.println ("      <td>"+"Ialt"+"</td>");
                                                    outFile.println ("      <td><strong>"+totalBudget+"</strong></td>");
                                                    outFile.println ("      <td><strong>"+totalOms+"</strong></td>");
                                                    outFile.println ("    </tr>");
                                        outFile.println ("</table><br></td>");
                                      outFile.println ("    </tr>");
                                      outFile.println ("</table>");
                              outFile.println ("        </td>");
                        outFile.println ("    </tr>");
                    }
                    outFile.println ("</table>");
                outFile.println ("</table>");
                outFile.println ("<br>");
                outFile.println ("<br>");
                totalBudget=0;
                totalOms=0;
    }

    public void udskrivFInfoSlutFil(PrintWriter outFile) throws IOException
    {
        outFile.println("</body>");
        outFile.println("</html>");
        outFile.close();
    }


    public HashMap getHashMapOms(ArrayList omsListe, String firma)
    {
        Omsaetning temp;
        HashMap hm = new HashMap();
        for(int j=0;j<omsListe.size();j++)
        {
            temp = (Omsaetning)omsListe.get(j);
            if(temp.getFirma().equals(firma))
            hm.put(new Integer(temp.getAar()), temp);
        }
        return hm;
    }

    public HashMap getHashMapBudget(ArrayList budgetListe, String firma)
    {
        Budget temp;
        HashMap hm = new HashMap();
        for(int j=0;j<budgetListe.size();j++)
        {
            temp = (Budget)budgetListe.get(j);
            if(temp.getFirma().equals(firma))
            hm.put(new Integer(temp.getAar()), temp);
        }
        return hm;
    }

    public int getStartAar(ArrayList omsListe, ArrayList budgetListe, String firma)
    {
        int oms = -1;
        int bud = -1;

        Omsaetning oTemp;
        for (int i=0;i<omsListe.size();i++)
        {
            oTemp = (Omsaetning)omsListe.get(i);
            if(oTemp.getFirma().equals(firma))
            {
                oms = Integer.parseInt(oTemp.getAar());
                break;
            }
        }

        Budget bTemp;
        for (int j=0;j<budgetListe.size();j++)
        {
            bTemp = (Budget)budgetListe.get(j);
            if(bTemp.getFirma().equals(firma))
            {
                bud = Integer.parseInt(bTemp.getAar());
                break;
            }
        }

        if(oms<bud)
            return oms;
        else return bud;
    }

    public int getSlutAar(ArrayList omsListe, ArrayList budgetListe, String firma)
    {
        int oms = -1;
        int bud = -1;

        Omsaetning oTemp;
        for (int i=omsListe.size()-1; i>=0; i--)
        {
            oTemp = (Omsaetning)omsListe.get(i);
            if(oTemp.getFirma().equals(firma))
            {
                oms = Integer.parseInt(oTemp.getAar());
                break;
            }
        }

        Budget bTemp;
        for (int j=budgetListe.size()-1; j>=0; j--)
        {
            bTemp = (Budget)budgetListe.get(j);
            if(bTemp.getFirma().equals(firma))
            {
                bud = Integer.parseInt(bTemp.getAar());
                break;
            }
        }

        if(oms<bud)
            return oms;
        else return bud;
    }

}
Avatar billede trp79 Nybegynder
26. juni 2003 - 13:38 #12
og så kan man jo starte browseren med:
Runtime.getRuntime().exec(<sti.til.fil.html>);
Avatar billede trp79 Nybegynder
01. juli 2003 - 08:26 #13
-->jakoba
Du vil ikke have andel i pointene? Du hjalp mig trods alt frem til en løsning ud fra dine ideer.
Avatar billede jakoba Nybegynder
01. juli 2003 - 08:30 #14
joe tak :)
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