Конвертация Linux HOWTO в формат, подходящий для печати

  Автор: © Марк Нильсен [Mark Nielsen]
Перевод: © Сергей Скороходов.


 

  1. Введение
  2. Скрипт на Perl для конвертации файлов Postscript
  3. Заключение
  4. Ссылки

Введение

Мне хотелось распечатать Linux HOWTO в виде книги. Но перспектива конвертировать все HOWTO вручную мне не улыбалась. Вместо этого, поскольку тексты HOWTO есть в формате Postscript, я подумал, что можно регулярно скачивать Postscript-файлы и с помощью разных инструментов преобразовывать их в подходящим образом отформатированный PDF или Postscript. Мне удалось сделать это с помощью сравнительно небольшого скрипта на Perl и других утилит Unix. В планах у меня создать задание для cron, выполняемое по крайней мере раз в неделю для обновления получившихся книг.

Скрипт на Perl для конвертации файлов Postscript

Скрипт представлен здесь, при желании можно взять текстовую Perl-версию здесь.

#!/usr/bin/perl

# ftp://ftp.tardis.ed.ac.uk/users/ajcd/psutils.tar.gz
# http://www.dcs.ed.ac.uk/home/ajcd/psutils/ 
# cp Makefile.unix Makefile
# ln -s /usr/bin/perl /usr/local/bin/perl
# mkdir -p /usr/local/share/man/man1
# /usr/local/bin/psbook

#system ("lynx -- исходники на ftp://ftp.tardis.ed.ac.uk/users/ajcd/psutils.tar.gz > /tmp/psutils.tar.gz)";
# system ("cd /tmp; tar -zxvf psutils.tar.gz; cd psutils; cp Makefile.unix Makefile");
# system ("ln -s /usr/bin/perl /usr/local/bin/perl; mkdir -p /usr/local/share/man/man1");
# system ("cd /tmp/psutils; make; make install; ln -s /usr/local/bin/psutils /usr/bin/psutils");

# Если у Вас установлены psutils, строки выше можно не смотреть. 
# Я их сохранил просто чтобы не забыть, как я устанавливал psutils.

my $TempFile1 = "/tmp/HOWTO_Convert_1.ps";
my $TempFile2 = "/tmp/HOWTO_Convert_1.pdf";
my $SourceDir = "/root/HOWTO";
my $Destination = "/root/HOWTO_Books";
my $ZippedPDF = "/root/HOWTO_books_pdf.tgz";
my $ZippedPS = "/root/HOWTO_books_ps.tgz";

if (!(-d $Destination)) {system "mkdir $Destination";}

print "Загружаем HOWTO с http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/ps/Linux-ps-HOWTOs.tar.gz\n";
system ("lynx --source http://www.ibiblio.org/pub/Linux/docs/HOWTO
/other-formats/ps/Linux-ps-HOWTOs.tar.gz > $SourceDir/Linux-ps-HOWTOs.tar.gz");
system ("cd $SourceDir; tar -zxvf Linux-ps-HOWTOs.tar.gz"); 

my @Files = <$SourceDir/*.ps.gz>;

foreach my $File (@Files)
  {
  my $command="gunzip -c $File | /usr/bin/psbook -s4 | mpage -2 > $TempFile1";
  print "Вызываем psbook и mpage для $File\n$command\n";
  system ($command);
  $command = "ps2pdf $TempFile1 $TempFile2";
  print "Выполняем ps2pdf\n$command\n";
  system ($command);

  my (@Temp) = split(/\//,$File);
  my $NamePDF = pop @Temp;
  my $NamePS = $NamePDF;
  $NamePDF =~ s/\.ps\.gz$/\.pdf/;
  $NamePS =~ s/\.ps\.gz$/\.ps/;
  my $NewPS = "$Destination/$NamePS";
  my $NewPDF = "$Destination/$NamePDF";

  system ("mv $TempFile2 $NewPDF"); 
  print "Создаем в виде книги HOWTO, $NewPDF\n";
  system ("mv $TempFile1 $NewPS");
  print "Отформатирован отформатирован HOWTO, $NewPS\n";
  }

print "Создание zip файлов $ZippedPDF and $ZippedPS\n";
system ("tar -zcvf $ZippedPDF $Destination/*.pdf");
system ("tar -zcvf $ZippedPS $Destination/*.ps");

Заключение

Это всего лишь простой скрипт на Perl, позволяющий загрузить и переформатировать HOWTO в формате Postscript. В будущем я собираюсь сделать следующее:

  1. вместо Lynx использовать в Perl LWP. Не должно вызвать затруднений.
  2. переписать весь Perl-скрипт на Python.
  3. добавить более серьезную проверку ошибок закачки файла и ошибок конвертации.
  4. создать объекты, которые смогут получать данные в виде простого текста, в формате TeX, Postscript или PDF или в других форматах, которые должны преобразовываться в Postscript относительно легко и создавать книги из них.

До сих пор мой простой "перловый" скрипт меня не подводил. Мне было бы интересно конвертировать "для народа" и другие документы, если конечно они подпадают под действие какуй-нибудь свободной лицензии наподобие представленных на www.gnu.org лицензий для документации.

Ссылки

  1. 10/2000 Micro Publishing: Part 3 , by Mark Nielsen .
  2. 7-1-2000 Micro Publishing, part II (Mark's Update)
  3. 12-1999 -- Micro Publishing.
  4. Если эта статья измениться, новую версию можно будет найти на http://www.gnujobs.com/Articles/18/HOWTO_Books.html

Марк работает независимым консультантом, добровольно работает в проектах наподобии GNUJobs.com, пишет статьи, свободные программы и работает добровольцем в проекте eastmont.net.

Марк Нильсен [Mark Nielsen]

Марк работает на ZING (www.genericbooks.com) и GNUJobs.com. До этого Марк основал сайт The Computer Underground (Компьтерное подполье). Он работает для бесприбыльных и основанных на добровольном участии [non-profit and volunteer] проктах, направленных на распространение открытой и бесплатной литературы и программ. На жизнь зарабатывает поиском людей для работы в различных связанных с GNU проектах, а также консультированием и разработкой в области веб-приложений и баз данных с применением Linux, FreeBSD, Apache, Zope, Perl, Python и PostgreSQL.

 


Copyright © 2001, Mark Nielsen.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 66 of Linux Gazette, May 2001

Вернуться на главную страницу