Pull to refresh

Comments 47

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

ваш КО
Очень полезная штука. Спасибо. Даже и не думал, что настроить настолько легко
UFO landed and left these words here
Зря вы так. Если написан — это значит, что написан и ничего более ) Работает? Нужен ли? Это все вопросы другого плана ))))
UFO landed and left these words here
<trollstyle>почесать репой что? голову? </trollstyle>
Права можно раздавать по ip клиентов который по теории должен быть в $ENV.
Эта технология может пригодиться для экономии трафика, когда печать идет через vpn/интернет. Сделать этот веб-принтер локально, а на стороне принтера сделать скрипт который будет брать эти pdf-ки и печатать.
У нас в компании сейчас на принтер летят raw-данные через vpn, в pdf виде экономия в районе 10..100 раз.
Раздавать права по IP — хорошая идея. В скрипт не включил только из-за того, что IP-адреса у многих провайдеров динамические. А в локальной сети ограничения, наверное, не нужны…

Ну вот и применение нашлось :-). А Вы правда посчитали экономию? Дело в том, что PDF-документы, генерируемые скриптом, содержат не текст, написанный шрифтами, а, фактически, картинки. Поэтому они больше, чем обычные PDF-ки.
>А Вы правда посчитали экономию?
да, конвертировал raw данные в pdf. тут конечно сильно влияет печатаемое содержимое, я проверял на «не тяжелых», офисных документах.
А, ну здорово.
Если, конечно, правда большой трафик через VPN на принтер идет
получилось, очень рад, зачем это, не знаю :)
спасибо
web-pdf имеет достаточно узкое применение.
Вы просто замечательный обфускатор. Надеюсь для обычной работы вы используете более разумные имена у переменных, а то я не завидую вашим коллегам.
По поводу имен переменных — Вы правы, конечно.
Но, на мой взгляд, написать вместо $d что-нибудь типа $input_data — это превратить легкий компактный скрипт в более громоздкий.
Поэтому удобочитаемыми сделал только имена функций. А классы не стал делать за ненадобностью :-)
Очень спорный момент, вы выкладываете код для людей, а им обычно сложно читать такое.

Вот для себя подобное можно писать, но лишь очень изредка…
в своё время писал веб-приложение на asp.net, там была поставлена задача конвертирования html-страницы в формат pdf. выкрутился я используя сторонний софт, консольную софтину wkhtmltopdf, найденную на code.google.com.
так что с уверенностью могу утверждать — задача весьма актуальная. поэтому я весьма благодарен вам за решение, приведённое в топике, весьма вероятно что оно пригодится и не раз.
А по моему, очень даже не бесполезная вещь. Вот к примеру, есть газета, где часть авторов работают удалённо. Так вот, наверняка этим авторам, печатающим статьи в ворде, будет проще посылать статьи в редакцию, просто отправляя их на печать похожего скрипта, нежели возится с электронной почтой, атачтментами, загрузкой по фтп итд итп…
Я думал об этом. Но есть несколько проблемок:

— Нужно сделать в скрипте какую-никакую авторизацию (ну, это дело техники)
— Нужно объяснять авторам, как настроить принтер (это посложнее будет)
— Из «напечатанного» файла невозможно извлечь текст…
Интересно! Появилась пара вопросов.

>Нам понадобится (кроме головы и рук) только работающий web-сервер с поддержкой cgi-bin, к которому у нас есть доступ по FTP

FTP — это опечатка ( м.б. HTTP? ), или же я чего-то не понял?

> Фактически, нужны только Perl и программа gs, которые есть практически везде.

Ну, perl я у себя на рабочей Windows XP нашел :), а с gs вот так вот с ходу проблема. Никогда не задавался целью, правда, эту gs как-то использовать.
Скрипт будет работать на web-сервере (сервер действительно, по определению, поддерживает HTTP). Разместить скрипт на сервере — через протокол FTP. Не опечатка :-)

На рабочей машине Perl и gs не нужны. Так как скрипт работает на сервере, то нужны они именно на сервере. Именно поэтому и обещано, что «за 10 минут»
Обещано было за 10 минут, причем такой вариант работает под Windows и под Linux. Не знаю, как в Debian и Ubuntu, но в Fedora и Mandriva с PDF backend'ом для cups надо еще повозиться — права там поставить какие-то, то-сё… Но вообще, как локальное решение, cups, конечно, лучше
Присоединяюсь, выложите, пожалуйста, если есть PHP версию.
Спасибо автору! На днях попробую скриптик. Есть принтеры, драйвера на которые отсутствуют для win7/winvista, а печатать по сети они не дают без них.
Если с драйверами проблема — можете попробовать вот так. Сам в свое время помучался…
кстати, есть похожий (частично) сервис — BlueMailCentral (я как-то ради интереса пользовался пару раз)
он тоже ставит в систему свой принтер, и когда вы посылаете документ на печать, он отсылается на их сервер

отличие в том, что печатается не pdf — документ реально печатают на бумаге,
и посылают в конверте по указанному вами адресу
добавлю (а то кто-то подумает, что мой коммент — реклама BlueMailCentral):
я имел в виду, что вы, возможно, могли бы (захотели бы?) сделать подобный сервис
Такая штука может быть полезна для электронного документооборота. Например, у вас в формате MS Word есть куча документов. Вы их махом печатаете на Web-принтере, который закидывает эти документы в систему документохранения. А человек, ответственный за порядок в документохранении, затем добавляет заголовки, права и тому подобное.
Ага, при этом действительно полезно, что у каждого документа есть «жесткая» копия. В отличие от системы хранения документах в общих папках, где любой может залезть и поправить документ «задним числом».
Спасибо, работает на УРА!
а вот только нельзя ли сделать так, чтобы имена файлов сохраняемых на сервере, соответствовали именам файлам — оригиналам.
есть ли gs для Windows? (веб-сервер поднят на рабочей машине с WinXP)
Прошу прощения, в первый раз плохо погуглил.
Последняя версия gs под Win есть здесь: pages.cs.wisc.edu/~ghost/doc/GPL/gpl864.htm
Однако, скрипт всё равно не работает, т.к. в perl для Windows не реализован pipe-open :( Вероятно, можно как-то решить эту проблему используя модуль Win32::Fork
Можете попробовать вариант на PHP
Кстати, насколько я помню, pipe-open в Perl для Windows работает, только команда со всеми аргументами должна состоять из одной строки. List, как в Perl для Linux, не допускается
Вы правы, небольшая правка скрипта заставила его работать. Большое спасибо :)
Можно еще давать пользователям доступ только к тем файлам, которые «распечатали» они сами, добавив пару строк кода:
if (!(-e "../pdf/".$ENV{'REMOTE_ADDR'}."/.htaccess"))
{
mkdir "../pdf/".$ENV{'REMOTE_ADDR'};
open (AF, "> ../pdf/".$ENV{'REMOTE_ADDR'}."/.htaccess");
print AF qq[Order allow,deny\nallow from 127.0.0.1 10.103.224.171 ].$ENV{'REMOTE_ADDR'};
close AF;
}

А сохранять файлы, соответственно, в директорию, имя которой равно ИПшнику пользователя.
Sign up to leave a comment.

Articles