argon bulletin board

Експертно търсене  

Новини:

Регистрирането на нови потребители е временно деактивирано.

Автор Тема: JAVA + принтери ???  (Прочетена 3052 пъти)

Иван Давидов

  • Гост
JAVA + принтери ???
« -: 13.05.2005, 19:00:16 »

Имам следния проблем: как да накарам java програма да работи с принтер, за предпочитане произволен?

По-подробно: необходимо ми е да направя аплет, който да пише RAW стрингове към принтер. Аз му пускам низ, то ми го отпечатва. Има ли някакво API за тази цел?

Ще съм благодарен на всички, които ми помогнат!
Активен

Gochev

  • Гост
Re: JAVA + принтери ???
« Отговор #1 -: 15.05.2005, 21:58:21 »

nqma kak da nqma API ... tva e Java se pak :> ne sam se zanimaval nikoga s printirane na neshto ama nemoje da nqma..
http://java.sun.com/products/jfc/tsc/articles/javaOne2001/595/index.html

http://onesearch.sun.com/search/developers/index.jsp?charset=utf-8&qt=Printer
vij tiq raoti :>> a i v API-to s sigurnost ima kam 100 paketa za printirane :P
Активен

Иван Давидов

  • Гост
Re: JAVA + принтери ???
« Отговор #2 -: 16.05.2005, 15:12:51 »

Благодаря за инфото, но все още не съм намерил това, което ме интересува. Там е работата, че API-то работи на високо ниво, а на мен митрябва да се напъхам по-ниско, едва ли не на ниво ESCAPE последователности. Питам аз има ли такава възможност? Казано просто, когато му кажа на принтера, "отпечатай <<<това>>>", той да отпечата <<<това>>> и нищо повече. Няма шрифтове, няма размери. Просто текст и толкова!
Активен

Nikolay Manchev

  • Неактивен Неактивен
  • Публикации: 185
    • http://www.manchev.org
Re: JAVA + принтери ???
« Отговор #3 -: 16.05.2005, 17:30:09 »

Здравей,

Не зная дали правилно те разбирам, но ето какво бих направил аз:

      FileInputStream in = new FileInputStream("toprint.txt");
      
      DocFlavor format = DocFlavor.INPUT_STREAM.AUTOSENSE;
      
      Doc doc = new SimpleDoc(in, format, null);
      
      PrintRequestAttributeSet attribs = new HashPrintRequestAttributeSet();
      
      PrintService[] services = PrintServiceLookup.lookupPrintServices(format, attribs);
      
      if (services.length == 0) throw new Exception("No suitable printer found!");
      
      DocPrintJob printJob = services[0].createPrintJob();
      
      printJob.print(doc, attribs);

Този код взема съдържанието на toprint.txt, който си е plain-text и го праща на първия принтер който докопа (мрежови, локален и т.н.).  Ако искаш по-прецизен контрол, даже можеш потока да си го обърнеш в ByteArrayInputStream и да си му предаваш байт по байт. Като цяло, ако целиш на определен принтер да печаташ, можеш да му дадеш малко настройки по атрибутите за търсене. Примерно:

attribs.add(MediaSizeName.ISO_A4);
attribs.add(Sides.DUPLEX);

и т.н.

Можеш да смениш и формата на DocFlavor-а на TEXT_PLAIN_UTF8, TEXT_PLAIN_US_ASCII и т.н.

Това го драснах за няколко минути - нищо не гарантирам. Принципно, при мен работи :)

Поздрави,

Николай Манчев
Активен

Емил Дойчев

  • Неактивен Неактивен
  • Публикации: 278
Re: JAVA + принтери ???
« Отговор #4 -: 16.05.2005, 17:40:22 »

За да имаш достъп на такова ниско ниво вероятно ще трябва да използваш native библиотеки. API-то работи на по-високо абстрактно ниво за да изолира платформените различия.

От опита, който имам мога да ти кажа, че печатането в Java не е тривиално. Ето ти малко повече инфо: http://java.sun.com/j2se/1.4.2/docs/guide/jps/spec/JPSTOC.fm.html
Активен

Nikolay Manchev

  • Неактивен Неактивен
  • Публикации: 185
    • http://www.manchev.org
Re: JAVA + принтери ???
« Отговор #5 -: 17.05.2005, 08:17:56 »

А, забравих да допълня - винаги остава и варианта с директна работа през портовете, според зависи от принтера - commapi-то принципно няма проблеми с RS232 и IEEE 1284. Ползвал съм го и съм сравнително доволен. За по-ниско ниво, поне аз не се сещам.

Поздрави,

Николай Манчев
Активен

Jack Johnson

  • Неактивен Неактивен
  • Публикации: 704
  • Хора, пазете си здравето! То няма цена!
Re: JAVA + принтери ???
« Отговор #6 -: 17.05.2005, 18:19:43 »

   Специални благодарности на г-н Манчев, за пореден път му свалям шапка ( не нося шапка, но ако носех, бих я свалил  :-)  )! И все пак имам още някои проблеми!

   Първият и най-съществен проблем, че че на мен ми трябва един точно определен принтер, а не "първия, който докопа". Ако имам два принтера от един и същ вид дали няма да се получи малка обърквация? 100% трябва да знам, че ще работя с еди-кой-си принтер и с никой друг.

   Ами... това ми е проблема, просто не съм сигурен дали 100% ще хване точно този принтер!

   Варианта с директното ползване на портовете, кабелите и т.н. си го помислих, ама малко трудно става през интернет  :wink: ето защо ми трябва АПЛЕТ.

   Принципно проблема може да се разреши с ActiveX, но за предпочитане е на JAVA, причините не ми се коментират точно тук и сега.

   Мога да формулирам въпроса си така: Как да определя точно 1 и точно конкретен принтер от гора с принтери, вързани в мрежа? Да предположим, че мрежата е съставена от хомогенни принтери ( еднакви марки и възможности ), тогава как да избера "по-еднаквия"?
« Последна редакция: 17.05.2005, 18:27:46 от Иван Давидов »
Активен

Nikolay Manchev

  • Неактивен Неактивен
  • Публикации: 185
    • http://www.manchev.org
Re: JAVA + принтери ???
« Отговор #7 -: 18.05.2005, 13:24:00 »

Така...

Най-бъзро и мръсно решение за идентификацията, която ти трябва е да си ловиш принтерчето по име.  PrintService елементите на масивчето,  което lookup-ът връща имат метод getName(), който връща мрежовото име на принтера. Тоест, дори да се еднакви  като параметри, разчиташ че два еднакви принтера с две еднакви имена не могат да са вързани на една и съща машина. Изхода от getName() ти е във формат:

\\darkstar\hp deskjet 6122 series

\\darkstar\hp LaserJet 3030 PCL 6

и т.н.

Принципно аз бих подходил по-генерално - ще си напиша Print Service Provider, който инсталирам чрез SPI и той ми предоставя JINI lookup само за принтера/принтери, които ме касаят - добавям си устройства, давам им глобално уникални имена и т.н.

Въпрос на ресурси и време е, кое от двете ще предпочетеш да направиш.

Поздрави,

Николай Манчев
Активен

Jack Johnson

  • Неактивен Неактивен
  • Публикации: 704
  • Хора, пазете си здравето! То няма цена!
Re: JAVA + принтери ???
« Отговор #8 -: 19.05.2005, 14:38:53 »

   Въпросът ми може и да е елементарен, но има ли разлика, ако принтера не е вързан към конкретен компюър, а е мрежов принтер, защото в случая се касае именно за мрежов принтер. Няма как да го пробвам лично, защото:

   1) У нас нямам принтер ( физическа машина ), а PDF принтерите не ги боя за принтери.

   2) Абсолютно никога не съм работил с мрежови принтери.
Активен