Avatar billede cybershah Nybegynder
28. juni 2005 - 22:38 Der er 28 kommentarer og
1 løsning

JAVA og Matrix printer (printerfonts eller rtf dokument)

Hej eksperter! jeg ved godt, at det ikke er særlig smart og lave links til andre spm, men mit problem er desværre ikke løst helt endnu og jeg vil gerne høre om andre med erfaringer på dette område kan hjælpe!
Det drejer sig om noget tekst fra en GUI, som skal skrives ud til en matrix printer. Problemet med at definere papirstørrelse er løst, men for at få printeren til at udskrive med den optimale hastighed og kvalitet, skal den udskrive med dens egene skrifttyper. Disse er ikke TT (TrueType) fonts og er ikke i windows fonts bibliotek! Men efter man har installeret printeren og valgt som standard, er disse fonts tilgængelige i fx WordPad.
Jeg er nået frem til to muligheder:

1- jeg har en print klasse, som tager alt fra JTextArea i GUI'en og skriver det ud. Her skal man på en eller andet måde fortælle JAVA at den skal bruge printerens fonts! Det ved jeg ikke hvordan man gøre!?

2- jeg valgt at droppe printklassen, og gemmer alt indhold af min JTextArea som en RTF dokument med den rigtige skrifttype! Jeg bruger denne metode:

public void go(){ 

Document document = new Document();

try {

RtfWriter2.getInstance(document, new FileOutputStream("data.rtf"));
           
document.open();
           
RtfFont rtfFont = new RtfFont("12 cpi",12);
Paragraph p = new Paragraph(myGUI.getOrderArea().getText(), rtfFont);
           
document.add(p);
                     
}
catch(DocumentException de) {
System.err.println(de.getMessage());
}
catch(IOException ioe) {
System.err.println(ioe.getMessage());
}
 
document.close();

Herfra kan jeg sagtens kalde min printerfont (12 cpi), da den er tilgængelig i WordPad. Og når jeg åbner filen "manuelt", er teksten klar til at blive udskrevet med den rigtige skrifttype!
Spørgsmålet er så hvordan jeg fra JAVA kan åbne og udskrive fra den gemte RTF fil.

Denne spm startede oprindeligt her:
http://www.eksperten.dk/spm/624720

Håber I kan hjælpe!
Avatar billede arne_v Ekspert
28. juni 2005 - 23:07 #1
jeg har en alternativ ide

hvad sker der hvis du åbner "filen" LPT1: og bare println'er ud på den
fra dit java program ?
Avatar billede cybershah Nybegynder
28. juni 2005 - 23:10 #2
jeg er ikke helt med arne! kan du evt. uddybe lidt? hvad gøre LPT1?
Avatar billede arne_v Ekspert
28. juni 2005 - 23:20 #3
det er den printer som sidder på parallel port nummer 1
Avatar billede cybershah Nybegynder
28. juni 2005 - 23:21 #4
nå ok! men den her printer er med USB tilslutning!
Avatar billede arne_v Ekspert
28. juni 2005 - 23:27 #5
jeg testede lige - det virker også med en netværks printer  \\server\printer

men USB er jo ikke en fil

hm

du kan ikke få den til at se ud som en LPTx: port ?
Avatar billede cybershah Nybegynder
28. juni 2005 - 23:33 #6
muligvis! jeg undersøger det lige.. men er vi enige om at du bare vil sende filen direkte til printeren via det der LPTx? Du må meget gerne lige vise mig den kode du har testet med. Har aldrig rodet med LPT og lignende i JAVA...
Avatar billede arne_v Ekspert
28. juni 2005 - 23:36 #7
min printer er på netværk så:

package june;

import java.io.*;

public class MatrixPrint {
    public static void main(String[] args) throws IOException {
        PrintWriter pw = new PrintWriter(new FileOutputStream("\\\\ARNECLUSTER\\SYS$PRINT"));
        pw.println("ABC");
        pw.println("ABC");
        pw.println("ABC");
        pw.println("\f");
        pw.close();
    }
}

det kan vist ikke være meget simplere
Avatar billede cybershah Nybegynder
29. juni 2005 - 00:18 #8
den kan i hvert fald ikke finde ud af det når jeg skriver FileOutputStream("CBM CD-S500")); har prøvet med og uden \\
Avatar billede cybershah Nybegynder
29. juni 2005 - 00:19 #9
hvad skulle der stå hvis nu denne printer var tilsluttet via LPT1?
Avatar billede cybershah Nybegynder
29. juni 2005 - 00:47 #10
jeg kan ikke helt få USB porten til at se ud som en LPT. Men jeg vil prøve at købe en switch i morgen, så jeg lige kan lave en lille netværk og så henvise til netværket i stedet for. Men jeg håber at man på en eller anden måde kan gøre det med den samme computer. Ellers siger jeg tak for hjælpen indtil videre.
Avatar billede arne_v Ekspert
29. juni 2005 - 07:43 #11
"LPT1:"
Avatar billede arne_v Ekspert
29. juni 2005 - 07:44 #12
Jeg tror ikke at det hjælper med en switch.

Kan du sætte dem op som netværksprinter ? Og så printe til den netværks printer ?
Avatar billede cybershah Nybegynder
29. juni 2005 - 22:30 #13
hej igen arne. jeg har ik fået fat i en switch endnu. jeg har kun en computer. kan jeg stadig sætte printeren til at blive netværks printer?
Avatar billede arne_v Ekspert
29. juni 2005 - 22:33 #14
hvis du sharer printeren

og så bruger den netværks printer fra samme PC

værd at prøve
Avatar billede cybershah Nybegynder
29. juni 2005 - 22:36 #15
jaaaaaaaa! det virker nu! jeg lavede printeren om til netværksprinter og så virker det! nu ska jeg bare få det til at spille sammen med gui'en.. men kan du give mig en forklaring på hvad forskellen er på at printe på den her måde!? sender den så hver karakter direkte eller hvad?
Avatar billede arne_v Ekspert
29. juni 2005 - 22:43 #16
den her måde kører fuldstændigt uden om windows printer driveren

det du println'er bliver sendt ud til printeren byte for byte

og printeren styrer så det hele
Avatar billede arne_v Ekspert
29. juni 2005 - 22:43 #17
Det burde være ret nemt at få teksten ud af JTextArea og ud på printeren på
denne måde
Avatar billede cybershah Nybegynder
29. juni 2005 - 22:46 #18
nu er det jo sådan at jeg har flere linier i min JTextArea. er det så bedste og tage hver linie og smide i en println eller hvad? d
den laver faktisk ingen afsnit selvom der står println. så fx de der 3 "abc"'er kom på samme linie.
Avatar billede arne_v Ekspert
29. juni 2005 - 22:48 #19
Hvordan bliver

"abc\r\n123\r\nxyz\r\n"

printet ?
Avatar billede cybershah Nybegynder
29. juni 2005 - 22:48 #20
det duer ihvert fald ik helt at bruge getText() metoden..
Avatar billede cybershah Nybegynder
29. juni 2005 - 22:51 #21
"abc\r\n123\r\nxyz\r\n" bliver MEGET mærkeligt! kun på en linie og nogle bogstaver printet ind i hinanden. ret ulæseligt.
Avatar billede arne_v Ekspert
29. juni 2005 - 23:29 #22
suk

\n burde få den printer til at gå ned på næste linie

har du mulighed for i printer properties at sætte en eller ander "raw mode" ?
Avatar billede cybershah Nybegynder
29. juni 2005 - 23:36 #23
jeg kigger lige på det. der er ellers en driver guide til printeren, hvor der er en masse kommando til de forskellige tegn. mon der også er et kommando til afsnit. den er her:
http://cbma.custhelp.com/cgi-bin/cbma.cfg/php/enduser/fattach_get.php?p_sid=S_QrQ5Jh&p_tbl=10&p_id=567&p_created=1065031138&p_olh=0
Avatar billede arne_v Ekspert
29. juni 2005 - 23:42 #24
\r\n burde være linie skift

og \f burde være side skift
Avatar billede cybershah Nybegynder
29. juni 2005 - 23:51 #25
har lavet om på nogle indstillinger som kunne minde lidt om det i printer properties, men det hjalp ikke. ja \r\n er jo linje skift, så det er meget mærkeligt at der ikke kommer ny linie.
Avatar billede cybershah Nybegynder
29. juni 2005 - 23:53 #26
der står også i api'en at println(String x) = Print a String and then terminate the line.
så bare println burde være nok, mener jeg.
Avatar billede cybershah Nybegynder
30. juni 2005 - 01:36 #27
Jeg kan godt få \r\n til at virke, hvis jeg skriver dem mange gange.. (valgt at smide den i et for loop). den opfatter \r\n som ny linie og går videre, indtil der ik er flere nye linier. Der skal åbenbart flere til, for at den kommer helt ned på nummer 2 linie. Problemet er, at printeren brøler når jeg laver afsnit og nby linie på denne måde. det er som om man tvinger den til noget! i wordpad, hvis man skriver noget på flere linier, så printer den ud uden ubehagelige lyd og problemer. tænkte på, om man måske ikke skulle sende ASCII koden for fx enter knappen til printeren i stedet for \r\n !?
Avatar billede cybershah Nybegynder
30. juni 2005 - 11:55 #28
hej arne! jeg fandt ud af det med ny linie! man skal bruge flush()!

pw.println("abc");
pw.flush();
pw.println("abc2");
pw.flush();
pw.println("abc3salama");

men mange tak for din hjælp. send et svar så får du pointene..
Avatar billede arne_v Ekspert
30. juni 2005 - 12:08 #29
ok
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