Java i DPL-programowanie drukarek datamax

0

Witam

Mam do was takie pytanie-czy ktoś posiada jakieś doświadczenie w programowaniu DPL i pisał programy z jakimś powodzeniem?
Otóż nauczyłem się drukować kody paskowe, tekst na etykietach ale z jedną rzeczą mam problem, a mianowicie ze wczytywaniem obrazka do drukarki.

Robię próby i mam tam jakieś wyniki ale są one bardzo dalekie od poprawnych...bitmapa jest jakaś dziwna-zamazana i brakuje w niej elementów a pcx w ogóle nie mogę władować-moze po prostu źle definiuje komendę DPL?

Zacznę wklejać kod za jakiś czas a w między czasie czy jest moze taka osoba posiadajaca doświadczenie w tym temacie?

pozdrawiam

0

Umieszczam swój kod:

String printingImage="1Y11"
+ "000" 
+ "0000"
+ "0000"
+ "v"; //name of image


//DPL commands to invoke with parameters
String STX = new Character((char) 2).toString();
String SOH = new Character((char) 1).toString();
String CR = new Character((char) 0x0d).toString();


//Loading bitmap to byte[]
File file2 = new File("c:/1/final.bmp");
FileInputStream fin2 = new FileInputStream(file2);
byte testbin2[] = new byte[(int) file2.length()];
fin2.read(testbin2);

String v = new String(testbin2); //bitmap to String

//DPL command
String loadAndPrintImage= SOH + "D" +CR
+ STX + "I" + "A" + "b" + "v" + CR + v + CR
+ STX + "L" +"D22" + CR + printingImage+CR + "E" + CR;

byte[] theByteArray = loadAndPrintImage.getBytes();

a następnie byte[] wysyłam bezpośrednio na drukarkę - java print service

.
.
.
Doc doc = new SimpleDoc(theByteArray, DocFlavor.BYTE_ARRAY.AUTOSENSE, null); 
job.print(doc, pras);

Czy ktoś moze mi pomóc?

0

Trochę mi zajęło ale już mam, podzielę się:

Znaki sterujące:"


    private static final String STX = new Character((char) 2).toString();
    private static final String SOH = new Character((char) 1).toString();
    private static final String CR = new Character((char) 0x0d).toString();

Drukuj obrazek :

    private static String komendaDrukujacaObrazekLogo = "1Y"//a i b stałe
            + "11"//Mnożnik szerokosci i wysokośći
            + "000"//stała
            + "0010"//odstęp od dołu
            + "0330"//odstęp od lewej
            + logo;//nazwa obrazka

Przed wczytaniem obrazu czyścimy moduł oraz włączamy pomijanie komend które przed przypadek mogą się włączyć gdy strumień bitowy reprezentujacy obrazek jest ładowany do drukarki:


String komendaResetujaca = STX + "qA" + CR + SOH + "D" + CR ;

Komenda wczytujaca obrazek-będzie miał nazwe logo (bitmapa do modułu A):

   String komendaWczytaniaObrazuLogo = STX + "I" + "A" + "b" + logo + CR;

Komenda drukujaca etykietę-w tym wypadku tylko obrazek:

String komendaDrukujaca = STX + "L" + CR 
    + "D11" + CR //mnoznik jakości D11-najwyższa
    + "m" + CR //jednostki metryczne
    + komendaDrukujacaObrazekLogo + CR 
    + "E" + CR;//koniec komendy

Teraz już tylko należy wszystkie powyższe Stringi reprezentujace komendy skonwertować do tablicy bajtowej np.:

  byte[] BytekomendaWczytaniaObrazuLogo = komendaWczytaniaObrazuLogo.getBytes();
.
.
.

A potem te tablice bajtowe (wszystkie zachowujac oczywiście kolejność) zamienić w jedną dużą tablicę bajtową. Najlepiej zrobić sobie metode ze zmienną ilością argumentów(tablic bajtowych), która ładnie połączy rządaną liczbę tablic.

Tak otrzymaną tabliće wpychamy już tylko na drukarkę-ja miałem ja na USB wiec używałem do tego

.
.
.
Doc doc = new SimpleDoc(finalCommand, DocFlavor.BYTE_ARRAY.AUTOSENSE, null);

ale nie ma potrzeby korzystania z DocFlavor jak macie ją na com-po prostu kopiujecie na port i tyle.

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1