Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Печать на Bluetooth принтере 
:(
    Опции темы
engineer.dev
Дата 11.6.2008, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.12.2007

Репутация: нет
Всего: нет



Мне попался принтер SPRT TⅢ Portable Micro Printer www.sprinter.com.cn
это портативный термопринтер китайского производства, так вот мне интересно как на нем можно печатать  по русски и как можно выводить графику? Установить соединение с мобилы удается, распечатать простейший текст по английски удается, но надо именно по русски и надо распечатать лого фирмы. Как это реализовать на J2ME
PM MAIL ICQ Jabber   Вверх
Samuil
Дата 12.6.2008, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



engineer.dev, Привет, У меня тоже проблеммы с принтером, нигде не мог найти нормальную документацию. Можешь поделится? хотябы ссылочкой..


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
engineer.dev
Дата 12.6.2008, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.12.2007

Репутация: нет
Всего: нет



Цитата(Samuil @ 12.6.2008,  06:51)
engineer.dev, Привет, У меня тоже проблеммы с принтером, нигде не мог найти нормальную документацию. Можешь поделится? хотябы ссылочкой..

Ну ссылочкой поделиться немогу но могу поделиццо опытом того что уже нарыл ;)
Код


 private final static byte[] CMD_INIT = {0x1B, 0x40};  //Инициализация принтера (ESC посл.)

public void printCheque(String str, String prnURL) {
        try {
            String [] header={"============\r\n"," TEST PAGEr\n","============\r\n"};

            //Создаем соединение с принтером по блютусу используя первый канал (:1)

            sc = (StreamConnection) Connector.open("btspp://" + prnURL + ":1");
            is = sc.openInputStream();
            os = sc.openOutputStream();

            //Пишем побайтно в поток то что надо распечатать

            os.write(CMD_INIT);
            os.write(header[0].getBytes());
            os.write(header[1].getBytes());
            os.write(header[2].getBytes());
            os.write(str.getBytes());
            os.flush();
            is.close();
            os.close();
            sc.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    } 


Если надо то кину пример поиска и выбора из найденого синезубого принтера
PM MAIL ICQ Jabber   Вверх
Samuil
Дата 13.6.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Цитата

Если надо то кину пример поиска и выбора из найденого синезубого принтера


engineer.dev, Буду благодарен))))


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
engineer.dev
Дата 13.6.2008, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.12.2007

Репутация: нет
Всего: нет



Класс для поиска Bluetooth устройств и сервисов

Код

public class BTsearch implements DiscoveryListener {

    String url;
    Vector devices, services;  //Сюда будут добавляться сервисы и устройства
    DiscoveryAgent agent;
    LocalDevice local;
    RemoteDevice rd;
   
    public BTsearch() {
        try {
            devices = new Vector();
            services = new Vector();
            FindDevices();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void FindDevices() {
        try {
            devices = new Vector();
            local = LocalDevice.getLocalDevice();                    //получаем наш девайс
            agent = local.getDiscoveryAgent();                       //получаем агента-искалку
            agent.startInquiry(DiscoveryAgent.GIAC, this);    //запускаем поиск доступных устройств 
                                                                                         //в качестве параметра передаем наш класс
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //Мобило само добавит найденые устроства
    
    public void deviceDiscovered(RemoteDevice remoteDevice, DeviceClass deviceClass) {
        devices.addElement(remoteDevice);
    }

    //Мобило само добавит найденые сервисы

    public void servicesDiscovered(int arg0, ServiceRecord[] serviceRecord) {
        for (int x = 0; x < serviceRecord.length; x++) {
            services.addElement(serviceRecord[x]);
        }
    }

    //Действо по окончании поиска сеовисов

    public void serviceSearchCompleted(int transID, int respCode) {
        switch (respCode) {
            case DiscoveryListener.SERVICE_SEARCH_COMPLETED:
                for (int x = 0; x < services.size(); x++) {
                    try {
                        DataElement ser_de = ((ServiceRecord) services.elementAt(x)).getAttributeValue(0x100);
                        String service_name = (String) ser_de.getValue();
                        System.out.println("Service: " + service_name);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                break;
            case DiscoveryListener.SERVICE_SEARCH_DEVICE_NOT_REACHABLE:
                System.out.println("1");
                break;
            case DiscoveryListener.SERVICE_SEARCH_ERROR:
                System.out.println("2");
                break;
            case DiscoveryListener.SERVICE_SEARCH_NO_RECORDS:
                System.out.println("3");
                break;
            case DiscoveryListener.SERVICE_SEARCH_TERMINATED:
                System.out.println("4");
                break;
        }
    }

    //Действо после окончания поиска устройств

    public void inquiryCompleted(int param) {
        switch (param) {
            case DiscoveryListener.INQUIRY_COMPLETED:    //Inquiry completed normally
                for (int x = 0; x < devices.size(); x++) {
                    try {
                        String device_name = ((RemoteDevice) devices.elementAt(x)).getFriendlyName(false);
                        System.out.println("Device: " + device_name);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                break;
            case DiscoveryListener.INQUIRY_ERROR:       // Error during inquiry
                System.out.println("5");
                break;
            case DiscoveryListener.INQUIRY_TERMINATED:  // Inquiry terminated by agent.cancelInquiry()
                System.out.println("6");
                break;
        }

    }



После того как устройства будут найдены можно из вектора получать устройство и оттда урл

Код

for (int x = 0; x < devices.size(); x++) {
                    try {
                        String addr = devices().elementAt(x).getBluetoothAddress();
                        System.out.println("Device: " + device_name);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
...
...
...
//Соединение устанавливается по выбраному адресу и каналу
StreamConnection sc = (StreamConnection) Connector.open("btspp://" + addr + ":1"); 



Так, а по поводу печати есть мысль, погуглив и почитав пришел к выводу что никакими иными методами это сделать нельзя кроме как выводить на печать графику. Практически во всех принтерах поддерживается печать битового изображения т.е. Bit-image printing commands

Код

4.4 Bit-image Printing Commands
4.4.1 ESC *
[Name]Select bit-image mode
[Format]: ASCII ESC * m n1 n2 [d]k
Hexadecimal 1B 2A m n1 n2 [d]k
Decimal 27 42 m n1 n2 [d]k
[Range] m = 0, 1, 32, 33
0 ≤ n1 ≤ 255
0 ≤ n2 ≤ 3
0 ≤ d ≤ 255
[Description]: Selects a bit-image mode using m for the number of dots
specified by n1 and n1, as follows:
Vertical Horizontam mode l
Dot Density Density Dot(max.)

0 8 dots, single density 8 68DPI 101 DPI 288
1 8 dots, double density 8 68DPI 203DPI 576
32 24 dots, single density 24 203DPI 101 DPI 288
33 24 dots, double density 24 203DPI 203DPI 576
[Notice]:
• If the values of m is out of the specified range, n1 and data following are
processed as normal data.
• The n1 and n2 indicate the number of dots of the bit image in the
horizontal
direction. The number of dots is calculated by n1 + n2 × 256.
• If the bit-image data input exceeds the number of dots to be printed on a
line, the excess data is ignored.
• d indicates the bit-image data. Set a corresponding bit to 1 to print a dot
or to 0 to not print a dot.
• After printing a bit image, the printer returns to normal data processing
mode.
• The relationship between the image data and the dots to be printed is as
follows:
• When 8-dot bit image is selected:


Короче после прочтения понял что можно кодировать изображение побитно, причем одна колонка это один байт, биты в байте показывают печатать точку или нет. Проблема в том что я никак не могу понять в этой фразе "ESC * m n1 n2 [d]k" сколько надо байт [d] писать в порт потому как по моим вычислениям ну никак не хочет печатать, может кто сталкивался с программингом принтеров и может кто поможет разобраться?
И еще сразу встает проблема как преобразовать цветное изображение в набор байтов, т.к. надо избавиться от цвета, что я делаю путем 
Код

pixels[x] = (byte) ((((imgArr[x] & 0x00FF0000) >> 16) + ((imgArr[x] & 0x0000FF00) >> 8) + (imgArr[x] & 0x000000FF)) / 3); 

сложения всех трех цветов и получения среднего знаечения и получаю монохромное, а вот как из монохромного байтного пикселя, получить точку которую надо или ненадо печатать я не допонял и  дальше пока не продвинулся.
Хорошо было бы решить сей вопрос т.к. сейчас мого мобильных принтеров и я думаю будет очень полезно уметь выводить то что надо на эти кривые девайсы ;(
PM MAIL ICQ Jabber   Вверх
Majesty
Дата 18.6.2008, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



Может быть чем-то поможет эта ссылка...
PM MAIL WWW   Вверх
engineer.dev
Дата 18.6.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.12.2007

Репутация: нет
Всего: нет



Цитата(Majesty @ 18.6.2008,  04:55)
Может быть чем-то поможет эта ссылка...

К сожалению это не то что мне надо, все это я уже прочитал. Может не столь понятно обьяснил постановку задачи...

Код

int[] imgArr = new int[8 * 288];
            img.getRGB(imgArr, 0, img.getWidth(), 0, 0, img.getWidth(), img.getHeight());
            pixels = new byte[24 * 288];
            for (int x = 0; x < imgArr.length; x++) {
                pixels[x] = (byte) ((((imgArr[x] & 0x00FF0000) >> 16) + ((imgArr[x] & 0x0000FF00) >> 8) + (imgArr[x] & 0x000000FF)) / 3);
            } 


Вот таким образом я получил монохромное изображение.
Далее мне надо получить набор 8-ми битовых байтов кодирующих изображение 8х288 бит, т.е. банально черно-белое каждый отсылаемый байт должен кодироваться 8 битами. Есть бит - печатается точка, нету - не печатается... Надо из выше отквоченого кода получить такое изображени.

|1б | 2б | 3б
|  х |      |
|  х |  х  |
|  х |  х  | х
|     |  х  | х
|     |  х  | х
|  х |  х  |
|  х |      | 
|  х |      |

Вот как такого рода изображение получить из цвятного ума не приложу ;(
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0983 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.