LINUX.ORG.RU

Как разрезать книгу для прошивки?

 ,


1

1

Пусть есть текст (книга), разбитый определенным образом на страницы. Нужно распечатать этот текст на листах формата A4 в альбомном расположении по две страницы на лист. В дальнейшем эти листы предполагается согнуть пополам и сшить по линии сгиба, чтобы получилась брошюра.

При этом возникает следующая проблема. На первом листе нужно напечатать справа первую, а слева последнюю страницу. С другой стороны того же листа нужно напечатать слева вторую, а справа --- предпоследнюю страницу. На следующем листе нужно печатать справа третью страницу, а слева --- третью с конца. И так далее.

Вопрос: как обеспечить такую верстку текста?

Понятно, что TeX мне в руки и вперед. Но есть ли какие-нибудь стандартные решения без сложного освоения? Может быть, есть специальный софт для этого?

Стиль booklet

А я для себя скрипт делал:

#!/bin/sh
# this script has been written by Eddy
#
#       printbook
#
# Создан 17-го Июнь 2004 года в 22:36
#
#    Prints a .ps file into book /32 pages, by pamphlets even-odd(revercive)
tmp=/tmp/printbook.$$
tmp1=/tmp/printbook1.$$
echo "Число страниц (кратно 4):"
read numb
book_table -f $numb

while read first
do
    if [ "$first" = "" ]; then
    echo -e "\n\t\t\t\aСлэдущий тетрад"
    read blin < /dev/tty
    continue
    fi
    psselect -p$first $1 $tmp 2> /dev/null
    psnup -2 $tmp $tmp1 2> /dev/null
    lpr $tmp1
    echo -e "\tПэрЕвэрни пачку, да"
    read blin < /dev/tty
    read second
    psselect -p$second $1 $tmp 2> /dev/null
    psnup -2 $tmp $tmp1 2>/dev/null
    lpr $tmp1
done < table
echo -e "\n\nСлущий, закончилы наканэц, ДА!!!!"
read blin < /dev/tty
rm table
rm $tmp
rm $tmp1
Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

а, еще забыл вот этот скрипт:

cat book_table.c 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//use: tofile [-f] <total pages> [pages-in-pamphlet]
FILE* f;
int i,total,b,ii,ost,tp;
int tostd=1;//if prints to std -- adds comments to it

void first(int N, int i)
{
        int tp4 = (int)N/4;
	if (tostd)
	    printf("\tside # 1\n");
	fprintf(f,"\n");
	for (ii=1; ii<tp4; ii++){
	    fprintf(f, "%d,%d,", tp*i+N-2*ii+2, tp*i+2*ii-1);
	}
        fprintf(f, "%d,%d", tp*i+N-2*tp4+2, tp*i+2*tp4-1);	
	fprintf(f,"\n");
}

void second(int N, int i)
{
	int tp4 = (int)N/4;
	if (tostd)
	    printf("\tside # 2\n");
	for (ii=1; ii<tp4; ii++){
	    fprintf(f, "%d,%d,", tp*i+2*tp4-2*ii+2, tp*i+2*tp4-1+2*ii);
	}
        fprintf(f, "%d,%d", tp*i+2, tp*i+4*tp4-1);
	fprintf(f,"\n");
}

int main(int argc, char** argv)
{
//    printf("1:%s", argv[1]);
    if ( strcmp(argv[1], "-f") == 0 ){
        f = fopen("table", "w");
	--argc;
	++argv;
	tostd=0;
        }
    else f = stdout;	
//    printf("\n2:%s", argv[1]);
    total=atoi(argv[1]);
    tp=32;
    if ( argc > 2)
	tp=atoi(argv[2]);
    b = (int)total/tp;
    ost=total%tp;
    if (ost%4 > 0 || tp%4 >0){
	fprintf(stderr, "Число страниц не делится на 4");
	exit(1);
	}
    for (i=0; i < b; i++){
	if (tostd)
	    printf("\nTetrad' # %d\n", i+1);
	first(tp,i);
	second(tp,i);
    }
    if ( ost>0 ){
        if (tostd)
	    printf("\nLast tetrad'\n");
	first(ost,b);
        second(ost,b);
    }
    fclose(f);
}
Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Да, все вышенаписанное нужно было из-за того, что psbook не работал.

Теперь он работает и ничего этого не нужно.

А еще можно при помощи pdftk собирать готовые pdf'ки

// Ē-моē, какой у меня уродский был стиль кодирования 10 лет назад!!!

Eddy_Em ☆☆☆☆☆ ()
Последнее исправление: Eddy_Em (всего исправлений: 1)

ТС, у тебя в каком формате всё это хранится? Тебе только печатать надо или и цифровую копию сделать для печати?

peregrine ★★★★★ ()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

А как еще назвать коротенький кусок кода? Я их скриптами и называю. И лежат они в общей директории со скриптами.

Eddy_Em ☆☆☆☆☆ ()

Если вкратце, то pdf2ps file.pdf - | psbook | psnup -2 - file.booklet.ps - и можно печатать. pdf2ps тут будет самой долгой и ресурсоёмкой стадией.

AITap ★★★★★ ()

Пусть есть текст (книга), разбитый определенным образом на страницы.

В каком формате текст? Просто .txt? Тогда как именно там обозначены страницы?

proud_anon ★★★★★ ()

Но есть ли какие-нибудь стандартные решения без сложного освоения? Может быть, есть специальный софт для этого?

psbook из psutils

no-such-file ★★★★★ ()

На первом листе нужно напечатать справа первую, а слева последнюю страницу. С другой стороны того же листа нужно напечатать слева вторую, а справа --- предпоследнюю страницу

А если так то после psbook сделать psnup

no-such-file ★★★★★ ()

При этом возникает следующая проблема. На первом листе нужно напечатать справа первую, а слева последнюю страницу. С другой стороны того же листа нужно напечатать слева вторую, а справа --- предпоследнюю страницу. На следующем листе нужно печатать справа третью страницу, а слева --- третью с конца. И так далее.

Вопрос: как обеспечить такую верстку текста?

Понятно, что TeX мне в руки и вперед. Но есть ли какие-нибудь стандартные решения без сложного освоения? Может быть, есть специальный софт для этого?

Такой процесс называется «спуск полос» (imposition).

Гугл подсказывает ссылки раз, два. Это я только две первые статьи взял, а там ещё есть.

static_lab ★★★★★ ()
Ответ на: комментарий от peregrine

Это ты не застал скрипты на ассемблере, наверное.

wakuwaku ★★★★ ()
Ответ на: комментарий от Eddy_Em

чутка оффтопа :)

я даже Makefile не добавил.

Кстати, если ты не знал (а может и знал), маке-файл за тебя добавили автоматически. (Для меня самого это стало приятной неожиданностью). см. http://ftp.linux.kiev.ua/pub/docs/developer/tools/make.txt 5.1. Пустой суффикс

Многие программы состоят из единственного исходного файла.  Для
обработки  этих  случаев  утилита  make предоставляет правило с
пустым суффиксом. 
...
               make cat dd echo date

(указанные программы состоят из одного файла), и все четыре ис-
ходных  C-файла передаются из командной строки shell'а на обра-
ботку при помощи .c-правила

Так что пробуй make mydiff, например

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.