Perl: Автоматическая печать PDF-документа при открытии [rus]
Поднялся вопрос: "Как добавить авто-старт печати при открытии файла PDF? Сделать всё в Perl"
Это "телодвижение" было нужно для минимизации кол-ва действий, которые должен выполнить пользователь, чтобы увидеть отчёт из системы на бумаге :)
Не буду вдаваться в подробности о том, почему именно такой способ был нужен, и что это за система, но, был вопрос — вот ответ :) Нашёл его, для себя, юзабельным. И очень надеюсь на то, что кому-нибудь он тоже пригодится :)
К делу: как и всегда, немного погуглив, я отыскал вполне себе такой хороший модуль на search.cpan.org :) Называется он — PDF::Reuse. Модуль позволяет совершать не малое кол-во манипуляций с готовыми PDF-файлами (подробнее…)
Модуль очень даже подошёл для моих нужд, т.к. PDF может содержать JavaScript код (что не может не радовать, но оговорка чуть ниже), и диалог печати довольно просто с помощью этого JS вызывается. По сему его и решил использовать, а PDF::Reuse, по счастливой случайности, позволяет добавлять в PDF тот самый JavaScript код :)
Добавлено 9 февраля 2010: сразу оговорюсь, вариант будет выглядеть следующим образом — открывается PDF, если viewer поддерживает JS в PDF, то будет вызван диалог печати (примерно так же поступает Google Docs при попытке напечатать документ из меню File) :) Оговорка прийдётся очень кстати, потому как, допустим, xpdf не оправдает ваших ожиданий :)
Получить нужный результат можно следующим способом
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/usr/bin/perl use strict; use PDF::Reuse; use CGI qw/param/; my $path = '/tmp/test/'; # путь до исходного PDF-файла print "Content-type: text/html;charset=utf-8\n\n"; unlink($path.'test1.pdf') if (-e $path.'test1.pdf'); # удаляем старый результат if (param('test') eq '1') { prFile($path.'test1.pdf'); # открываем файл prText(10,300,'Hello,'); # добавляем произвольный текст prText(30,340,'WORLD!!!'); # в файл prJs('function prn() { this.print(); } prn();'); # добавляем JS-код, который будет вызывать диалог печати prEnd(); # открываем PDF print "<script>window.open('http://www.sdenix.net/test/test1.pdf')</script>"; } print "<html><head><title>PDF test</title></head><body>\n"; print "<form action='/test_pdf'><input type='hidden' name='test' value='1' /><input type='submit' value='Смотрим пример с авто-печатью' /></form><br />\n\n"; print "</body></html>"; |
Вот, собственно, и всё! Посмотреть живой пример можно тут. Теперь включаем фантазию и используем этот модуль в своих целях :)


(3 голосов, средний: 3,33 из 5)