| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > драйвер для передачи содержимого в java-программу |
| Автор: firedrago 22.9.2005, 17:21 |
| привет всем! у меня возникла проблема, мне надо если пользователь нажимает печать, содержимое документа для печати должно передоваться в java программу которая потом конвертирует и отправляет это например на факс или как аттачмент по емаилу. подскажите как это можно осуществить зарание спасибо! надо для win xp и linux |
| Автор: LSD 22.9.2005, 18:57 | ||
Передаваться откуда и в каком формате? |
| Автор: 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. ... ну да ладно - вдруг так склалось, и у проектировшика мозги поехали?! А искать и разбираться надо в самом ворде, точнее в офисе. Как к 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 | ||
Под виндами смотри в сторону DDK (Driver Development Kit). Еще есть такой вариант, был у меня один драйвер для печати в PDF документы, и его можно было настроить так чтобы он открывал документ после печати. При этом запускалась ассоциированная программа. Если в качестве такой программы указать твое приложение, то можно добиться запуска его на автомате. Не очень элегантно, но не надо связываться с написанием драйвера. |
| Автор: firedrago 23.9.2005, 10:07 |
| спасибо за советы, надо будет посмотреть..... у меня тут еще одна идея возникла, по идее можно сделать как сетевой принтер, направить на определенный порт, а там сокетом ловить.... или это не реально ? |
| Автор: LSD 23.9.2005, 10:39 | ||
Для этого придется реализовывать принт-сервер. Не думаю что это очень просто. Это раз, а во вторых от драйвера не избавит полностью, даже для печати по сети требуется драйвер, т.к. у всех принтеров разные возможности (разрешение, цветность и т.д.). Тебе придется или опять писать свой драйвер или эмулировать некий принтер. |
| Автор: anonymouse 23.9.2005, 10:40 |
| Может идея не в тему но есть вариант: если открывать документ в веб странице (вордовский или еще какой документ, там можно вставить как часть окна) и предлагать нажимать кнопку для распечатывания. Ну а там уже понятно... |
| Автор: firedrago 23.9.2005, 11:01 |
| мда уж.... нашел то что надо - http://www.blackice.com/Printer%20Drivers/Messaging%20Interface.htm но стоит немеренных денег.... |
| Автор: LSD 23.9.2005, 11:05 |
| Не знаю что за задача, но может можно обойтись COM/ActiveX? |
| Автор: firedrago 23.9.2005, 12:48 |
| окозалось все проще, чем я думал - http://www.cs.wisc.edu/~ghost/redmon/ и делов то..... красота..... |
| Автор: 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) в качестве очереди печати идет очередь факсов, которой можно порулить через виндовые утилиты+тотже резидент. В результате из любой программы выбираем печать, принтер \\мой\факс . В выскочившее окно ( для "продвинутых" пользователей окно модальное, поверх всех - пока не закроешь, работать нельзя ) ввел номер факса - и жди сообщения по мылу о успешной отправке. Если передумал - открыл принтер "Факс", порулил заданием. |