Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программное обеспечение > [FireFox] Сохранить данные в файл и запустить bat


Автор: Akella 9.12.2010, 12:34
Может я сейчас глупость скажу, но всё же  smile 

Предисловие.
В общем на филиалах установлены только матричные принтеры. Из виндовой программы печатать в ТЕКСТОВОМ режиме шрифтами самого принтера проблем не составляет.
Но вот незадача. Организация переходит на ВЕБ. Т.е. пользователи будут работать в браузере. Почти все в Firefox.
В программе есть такое понятие, как конструктор печати для создания всевозможных отчётов.
Отчёты создаются ввиде текстовых файлов, которые отображаются в браузере моноширным шрифтом с разделителями.
вот так примерно выглядит это в браузере:
user posted image

Теперь вопрос.
Было бы неплохо, если бы программно из браузера можно было выполнить сохранение этого файла на диск, в какую-нибудь временную папку и потом запустить BAT (CMD) файл, для распечатывания такой командой:
Код
copy file.txt prn


Но на сколько мне известно, браузер из-за соображений безопасности не может такое сделать.
Какие есть варианты. Может есть готовые дополнения??

И ещё. Если у кого есть возможность разработать расширение для Firefox под заказ, готовы оплатить.

Автор: Akella 9.12.2010, 13:01
На данный момент работает из виндовой программы так:

есть командный файл в папке программы вида:
Код

net use lpt5 "\\localhost\Epson LX-300-"
copy %1 lpt5
net use lpt5 /delete


и вот так запускаем на печать:
Код
toprn.cmd file.txt

Автор: Snowy 9.12.2010, 13:36
Можно написать крохотную програмку без интерфейса, которая будет выводить файл, передаваемый в коммандной строке в порт дефолтового принтера.
Далее, создать ей ассоциацию с файлами с расширением, например, ".prn"
Таким образом, можно всем отчётам назначаем расширение ".prn"
и, при открытии в любом браузере, они автоматом уйдут на печать...

Добавлено через 39 секунд
Разумеется, придётся всем пользователям её установить.
Но плагин тоже ведь ставить нужно.

Автор: Akella 9.12.2010, 13:54
Цитата(Snowy @  9.12.2010,  13:36 Найти цитируемый пост)
Можно написать крохотную програмку без интерфейса, которая будет выводить файл, передаваемый в коммандной строке в порт дефолтового принтера.

это не проблема, это и cmd файл сейчас может, я выше написал как

Добавлено через 6 минут и 33 секунды
Цитата(Snowy @  9.12.2010,  13:36 Найти цитируемый пост)
Далее, создать ей ассоциацию с файлами с расширением, например, ".prn"
Таким образом, можно всем отчётам назначаем расширение ".prn"
и, при открытии в любом браузере, они автоматом уйдут на печать...

хмм, надо подумать

Автор: Akella 9.12.2010, 16:29
а на Firefox можно что-то похожее провернуть?

Код

<script LANGUAGE="JavaScript">
new ActiveXObject("Scripting.FileSystemObject")
var fso = new ActiveXObject("Scripting.FileSystemObject");
var file = fso.CreateTextFile("d:\\test.txt", true); //имя файла
file.WriteLine("текст для записи в файл");
file.Close();
</SCRIPT>

Автор: Xenag 10.12.2010, 02:05
Для старого фирефокса был плагин для подключения ActiveX.
Правда глючноватый...
А сейчас рекомендуют только IE.
Точнее плагины, которые открывают IE во вкладке фирефокса.
Но это всё не вкусно.
Не вижу разницы между IE и IE в виде вкладки фирефокса.
Только заморочки с тем, как открывать страницу - в фоксе или в IE.
Вобщем активикс - только для IE. 
Если хочешь - пересаживайте всех с фокса на IE.
Но в последнем IE с активиксами тоже не всё просто. Капризный он стал.
Нужно бороться с настройками безопасности.

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

Автор: Akella 10.12.2010, 10:48
Тем не менее, FF мне кажется наиболее перспективным.

Вот наши разработчики пишут код и он нормально работает только в FF. А для остальных браузеров нужно допиливать напильниками. Я был немного шокирован. Оказывается в вебе тоже не так всё просто с кроссплатформенностью, если так можно назвать. В вебе оно зовётся кроссбраузерность.

Автор: bilbobagginz 21.12.2010, 07:51
Akella, Акелла, а разьве нельзя через политики безопасности или логон скрипт определить всем принтер НЕ ПО УМОЛЧАНИЮ, 
и просто тупо печатать на него отчет ? разьве в JS нет функции печати через браузер printWithDialog(), print() ?
там еще можно определить CSS для печати, чтобы было fixed-width (и предполагаю, что функции можно передать путь на принтер)

Автор: Akella 21.12.2010, 10:26
я не понимаю о чём ты

Добавлено через 1 минуту и 52 секунды
Представь, что к компьютеру подключен к LPT матричный принтер Epson. Нужно на него отправить текст в DOS кодировке. Текст, а не графику. На всякий случай скажу, что печать данных виндовыми шрифтами - это не текст и печать из Word`а и даже Блокнота - это тоже не текст.

Автор: Sibit 23.12.2010, 10:13
Сохранять файлы в FireFox можно, только это делается по-другому чем в експлорере

Код

    function cf_random(){

        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);

        path="c:\\file.txt"

        file.initWithPath(path);

        if(!file.exists()) file.create(0,0664);
/*
        var out = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
        out.init(file,0x20|0x02,00004,null);
        out.write(content,content.length);
        out.flush();
        out.close();
*/

        document.writeln("Создан файл с именем:" + path);

        return true;
    } 


Сам пример выдрал из проекта http://www.tiddlywiki.com/ сохранение данных закомментировал что бы работало как есть.

А распечатку сделать через задание, т.е. браузер сохраняет файл в определенную папку, а скрипт по заданию заглядывает туда и если она не пуста - отправляет не печать.



Автор: Akella 23.12.2010, 10:37
дело не только в сохранении, а дело ещё в отправке этого файла на prn

Добавлено через 1 минуту и 12 секунд
Цитата(Sibit @  23.12.2010,  10:13 Найти цитируемый пост)
А распечатку сделать через задание, т.е. браузер сохраняет файл в определенную папку, а скрипт по заданию заглядывает туда и если она не пуста - отправляет не печать.

какой скрипт, по какому заданию?

Автор: Sibit 23.12.2010, 11:38
Скрипт простой, типа 

copy $PATH/file.txt LPT1  
del .\file.txt

Дело же в винде происходит? 

Тогда Пуск>Панель управления>Назначенные задания>Добавить задания 

Там выбрать свой скрипт и настроить его запуск раз в минуту

Автор: Snowy 23.12.2010, 12:34
Отправлять через задание - потоконебезопасное занятие.
Тут вступают в игру две крайности - Увеличивая интервал, заставляем пользователя дольше ждать начала печати, сокращая интервал, рискуем увеличить шанс того, что документ уйдёт на печать не полностью.
Можно, конечно, пойти по принципу, как делали в DOS, добавляя файл-флаг, что сильно усложняет алгоритм.
Но, если интервал будет достаточно мал, то событие может наступить повторно ещё до окончания печати (не забываем - принтер матричный), особенно, если документ на N количество страниц.
Конечно, если взять большой и широкий напильник, то можно победить многозадачность винды...  smile 

Автор: Sibit 23.12.2010, 12:52
Ну тут можно навыдумывать всякого, например, сначала переносить файл с уникальным именем в спец папку а оттуда уже отправлять на печать.

Автор: Akella 23.12.2010, 14:17
Цитата(Sibit @  23.12.2010,  11:38 Найти цитируемый пост)
Тогда Пуск>Панель управления>Назначенные задания>Добавить задания 

Там выбрать свой скрипт и настроить его запуск раз в минуту 

 smile и ждать пошло на печать или нет? Не смеши.

Добавлено через 1 минуту и 56 секунд
Ребята плагин уже написан. Я не знаю Kefir выложил его на паблик в mozdev или нет.  Но если что, вот он, прикрепил к письму:

Автор: Akella 23.12.2010, 14:23
Sibit, я не понимаю тебя, зачем ТАК извращаться? Это называется "настоящие герои всегда идут в обход"  smile 

Автор: Sibit 24.12.2010, 05:56
Цитата(Akella @  23.12.2010,  14:23 Найти цитируемый пост)
Sibit, я не понимаю тебя, зачем ТАК извращаться? 

Я просто вариант предложил smile не самое, конечно, изящное решение, но матричные принтеры тоже изрядный анахронизм  smile 

PS за то я теперь знаю как сохранять файлы на диск  в фаерфоксе. smile 

Автор: Akella 24.12.2010, 10:25
Цитата(Sibit @  24.12.2010,  05:56 Найти цитируемый пост)
но матричные принтеры тоже изрядный анахронизм 

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

Автор: Akina 24.12.2010, 10:33
Akella, я не понимаю твоей проблемы. 
Установи ещё один принтер. Тип - локальный, привязка - LPT1 (или где там матричник), драйвер: производитель Generic, имя Generic/TextOnly. И печатай прямо на него из файрфокса.

Автор: Akella 24.12.2010, 15:10
Спасибо, попробую

Автор: Akella 27.12.2010, 12:11
Цитата(Akina @  24.12.2010,  10:33 Найти цитируемый пост)
Установи ещё один принтер. Тип - локальный, привязка - LPT1 (или где там матричник), драйвер: производитель Generic, имя Generic/TextOnly. И печатай прямо на него из файрфокса.

Установил принтер (Generic, имя Generic/TextOnly).
Выбрал Файл->Печать, отправил на печать. Принтер просто выбрасывает лист бумаги и ничего не печатает.

Автор: Akina 27.12.2010, 12:48
Цитата(Akella @  27.12.2010,  13:11 Найти цитируемый пост)
Принтер просто выбрасывает лист бумаги и ничего не печатает. 

Значит, на печатаемом документе нет текстовых данных.

Автор: Akella 27.12.2010, 15:19
да что ты говоришь  smile , а это, значит, не текст?

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