Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > драйвер для передачи содержимого в java-программу


Автор: firedrago 22.9.2005, 17:21
привет всем!
у меня возникла проблема, мне надо если пользователь нажимает печать, содержимое документа для печати должно передоваться в java программу которая потом конвертирует и отправляет это например на факс или как аттачмент по емаилу.
подскажите как это можно осуществить
зарание спасибо!

надо для win xp и linux

Автор: LSD 22.9.2005, 18:57
Цитата(firedrago @ 22.9.2005, 18:21)
содержимое документа для печати должно передоваться в java программу

Передаваться откуда и в каком формате?

Автор: firedrago 22.9.2005, 19:06
например из ворда, жмем печатать, выбираем например факс жмем ок, наверное в RAW он сначало будет, запускается java программка, спрашивает куда шлем, вписиваем, жмем ок, RAW конвертируется в TIFF и уходит на факс....

Автор: LSD 22.9.2005, 19:11
Для этого надо будет или реализовать свой драйвер принтера. Или использовать существующий который печатает в PDF или PostScript, а затем парсить данный файл и тогда уже посылать его куда надо.

Если ты хочешь, чтобы твоя программа запускалась автоматом, сразу после печати, то надо писать свой драйвер.

Автор: COVD 22.9.2005, 20:18
так ворд это и сам вроде умеет делать

Автор: Sleepy_PIP 22.9.2005, 20:45
афигеть.
а причем тут ява?
Меня умиляет когда чисто виндовые штуки пытаются делать на java. ...
ну да ладно - вдруг так склалось, и у проектировшика мозги поехали?! smile.
А искать и разбираться надо в самом ворде, точнее в офисе.
Как к IE, так и е Excel, так и к ворду - могут быть прицеплены те или иные приложения.
Но уж наверняка тематика не этой конференции ...

Автор: firedrago 22.9.2005, 21:45
@ LSD
я не нашел никаких описаний как это делается ... только через длл ? и писать надо на C++? или есть какая-то возможность передать все содержимое как аргумент в явовскую программу?

@COVD - Ворд был плохой пример, см ниже

@Sleepy_PIP
ява тут притом, что написан полностью сервер-клиент для емаила факса смс файловый архив база данных клиетов и поставщиков.
потребности передачи туда файла не через save, open раньше не было.
Ворд был плохой пример - это может быть все что угодно и что можно разпечатать. специально для каждой проги писать транспортер - замучаешся, поэтому и была идея сделать это через принтер....
меня не интересует только виндовс и это я писал.

Автор: Zandr 23.9.2005, 07:34
Так, ну если ты данные выбрасывать собираешься через печать, то определенно писать драйвер вирт. принтера, который будет оповещать твою Java прогу и перебрасывать ей данные. Использовать существующий (distiller например) не проканает, т.к. он не сможет известить о печати твою прогу. Так что нужно C++ (кстати, к стыду своему не знаю можно ли на нем писать драйвера...). А данные пробрасывать уже через сокеты. Печать на разных платформах реализована по разному со всеми вытекающими.

Автор: 3,14 23.9.2005, 08:05
firedrago, на сколько я знаю дрова действительно легче писать на C++, правда для win-ды и линуха писать придёться отдельно, попробуй спросить у сишников, думаю им больше об этом известно

Автор: LSD 23.9.2005, 09:24
Цитата(firedrago @ 22.9.2005, 22:45)
я не нашел никаких описаний как это делается ...

Под виндами смотри в сторону DDK (Driver Development Kit).

Еще есть такой вариант, был у меня один драйвер для печати в PDF документы, и его можно было настроить так чтобы он открывал документ после печати. При этом запускалась ассоциированная программа. Если в качестве такой программы указать твое приложение, то можно добиться запуска его на автомате. Не очень элегантно, но не надо связываться с написанием драйвера.

Автор: firedrago 23.9.2005, 10:07
спасибо за советы, надо будет посмотреть.....

у меня тут еще одна идея возникла, по идее можно сделать как сетевой принтер, направить на определенный порт, а там сокетом ловить.... или это не реально ?

Автор: LSD 23.9.2005, 10:39
Цитата(firedrago @ 23.9.2005, 11:07)
у меня тут еще одна идея возникла, по идее можно сделать как сетевой принтер, направить на определенный порт, а там сокетом ловить.... или это не реально ?

Для этого придется реализовывать принт-сервер. Не думаю что это очень просто. Это раз, а во вторых от драйвера не избавит полностью, даже для печати по сети требуется драйвер, т.к. у всех принтеров разные возможности (разрешение, цветность и т.д.). Тебе придется или опять писать свой драйвер или эмулировать некий принтер.

Автор: anonymouse 23.9.2005, 10:40
Может идея не в тему но есть вариант:
если открывать документ в веб странице (вордовский или еще какой документ, там можно вставить как часть окна) и предлагать нажимать кнопку для распечатывания. Ну а там уже понятно...

Автор: firedrago 23.9.2005, 11:01
мда уж.... нашел то что надо - http://www.blackice.com/Printer%20Drivers/Messaging%20Interface.htm но стоит немеренных денег.... smile

Автор: LSD 23.9.2005, 11:05
Не знаю что за задача, но может можно обойтись COM/ActiveX?

Автор: firedrago 23.9.2005, 12:48
окозалось все проще, чем я думал - http://www.cs.wisc.edu/~ghost/redmon/ и делов то..... красота..... smile

Автор: LSD 23.9.2005, 12:53
А парсить как будешь?

Автор: firedrago 23.9.2005, 14:26
для начала перенаправление на явовский класс с аргументом RAW, его записываем, выдаем окно куда и как его слать или что с ним делать, выбераем, и для начала конвертируем внешними программами.... а позже надо будет разобраться, может через ява либы его сконвертить можно будет....

Автор: firedrago 23.9.2005, 14:46
вроде как через http://java.sun.com/products/java-media/2D/forDevelopers/sdk12print.html можно будет все конвертнуть... он понимает PostScript ....

Автор: alexsmirnov 26.9.2005, 17:36
Все гораздо проще. По крайней мере у меня с hylafax все живет в лучшем виде.
1) сервер Samba - на нем сделан сетевой принтер. В качестве драйвера - первый попавшийся под руку postscript, а вот в качестве программ печати вместо стандартных lpr/lpq/lprm - свои скрипты. по 10 строчек на perl, но никто не мешает и на какой-либо более сложный обработчик повесить.
2) скрипт при получении данных пытается связаться по TCP с машиной, от которой пришло задание на печать. Там висит резидентом программа, в которой можно ввести номер телефона и др. параметры. Gо получении запроса по сети она открывает окошко. Написана на C, но легко может быть и на Java.
3) полученное - postscript и др. параметры прогоняем через gnuhostscript и получаем все что нужно.
4) в качестве очереди печати идет очередь факсов, которой можно порулить через виндовые утилиты+тотже резидент.

В результате из любой программы выбираем печать, принтер \\мой\факс . В выскочившее окно ( для "продвинутых" пользователей окно модальное, поверх всех - пока не закроешь, работать нельзя ) ввел номер факса - и жди сообщения по мылу о успешной отправке.
Если передумал - открыл принтер "Факс", порулил заданием.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)