* [Comm] Как разрезать книгу для прошивки
@ 2014-11-03 18:29 Eugine Kosenko
2014-11-03 20:14 ` Denis G. Samsonenko
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Eugine Kosenko @ 2014-11-03 18:29 UTC (permalink / raw)
To: community, linux-list
Пусть есть текст (книга), разбитый определенным образом на страницы.
Нужно распечатать этот текст на листах формата A4 в альбомном
расположении по две страницы на лист. В дальнейшем эти листы
предполагается согнуть пополам и сшить по линии сгиба, чтобы
получилась брошюра.
При этом возникает следующая проблема. На первом листе нужно
напечатать справа первую, а слева последнюю страницу. С другой стороны
того же листа нужно напечатать слева вторую, а справа ---
предпоследнюю страницу. На следующем листе нужно печатать справа
третью страницу, а слева --- третью с конца. И так далее.
Вопрос: как обеспечить такую верстку текста?
Понятно, что TeX мне в руки и вперед. Но есть ли какие-нибудь
стандартные решения без сложного освоения? Может быть, есть
специальный софт для этого?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки
2014-11-03 18:29 [Comm] Как разрезать книгу для прошивки Eugine Kosenko
@ 2014-11-03 20:14 ` Denis G. Samsonenko
2014-11-04 4:51 ` Gleb Kulikov
2014-11-04 9:54 ` Victor
2 siblings, 0 replies; 9+ messages in thread
From: Denis G. Samsonenko @ 2014-11-03 20:14 UTC (permalink / raw)
To: ALT Linux Community general discussions
День добрый!
4 ноября 2014 г., 0:29 пользователь Eugine Kosenko написал:
> Пусть есть текст (книга), разбитый определенным образом на страницы.
> Нужно распечатать этот текст на листах формата A4 в альбомном
> расположении по две страницы на лист. В дальнейшем эти листы
> предполагается согнуть пополам и сшить по линии сгиба, чтобы
> получилась брошюра.
> ...
> Вопрос: как обеспечить такую верстку текста?
> ...
psbook и psnup из пакета psutils. Если не поможет, то более
низкоуровневый pstops оттуда же.
Ещё есть jpdftweak: http://jpdftweak.sourceforge.net/
--
Всего доброго,
Денис.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки
2014-11-03 18:29 [Comm] Как разрезать книгу для прошивки Eugine Kosenko
2014-11-03 20:14 ` Denis G. Samsonenko
@ 2014-11-04 4:51 ` Gleb Kulikov
2014-11-04 9:54 ` Victor
2 siblings, 0 replies; 9+ messages in thread
From: Gleb Kulikov @ 2014-11-04 4:51 UTC (permalink / raw)
To: ALT Linux Community general discussions
[-- Attachment #1: Type: text/plain, Size: 744 bytes --]
В письме от Понедельник 03 ноября 2014 20:29:43 пользователь Eugine Kosenko
написал:
> Вопрос: как обеспечить такую верстку текста?
В аттаче популярный скрипт, проделывающий эту операцию над произвольными pdf
файлами (NB!: требует pdflatex + pdfinfo и не терпит, если имена файлов на
русском или содержат спецсимволы [это, скорее, претензии к pdflatex]).
--
Салют, /GLeb
UIN: 15341920
jabber://gleb@asd.iao.ru
sip://2387245@sipnet.ru (telephony)
skype://gleb_kulikov.tomsk (telephony)
[-- Attachment #2: pdfbook --]
[-- Type: text/x-python, Size: 5713 bytes --]
#! /usr/bin/python
# pdfbook.c Rearrange pages in a PDF file into signatures.
#
# Author Tigran Aivazian <tigran at aivazian.fsnet.co.uk> (original C version)
# Olivier Aubert <olivier.aubert at liris.cnrs.fr> (python version)
#
# Copyright: GPLv2
#
# Based on the algorithm from psutils/psbook.c, which was
# written by Angus J. C. Duggan 1991-1995.
#
# For example, to convert a file gnt.pdf into a book with
# signature 32, we can use:
#
# $ pdfbook -s32 gnt.pdf gnt-book.pdf
# FIXME: implement max signature size
# FIXME: try to set the "duplex on short sides" option
import sys
import os
import shutil
import re
import tempfile
from optparse import OptionParser
def check_program(p):
for d in os.getenv('PATH').split(':'):
if os.path.exists(os.path.join(d, p)):
return True
return False
def check_dependencies():
ret=True
if not check_program('pdflatex'):
print "pdflatex is not installed. Please install it."
ret=False
if not check_program('pdfinfo'):
print "pdfinfo is not installed. Please install the xpdf-utils package."
ret=False
return ret
def swap_pairs(array, len):
"""Swap pages for right-to-left typesetting
"""
for i in range(0, len, 2):
array[i], array[i+1] = array[i+1], array[i]
def get_number_of_pages(fname):
"""Return the number of pages in the PDF file.
"""
npages=0
regexp=re.compile("Pages:\s+(\d+)")
f=os.popen("pdfinfo '%s'" % fname)
for l in f:
m=regexp.search(l)
if m:
npages=m.group(1)
break
return int(npages)
def shuffled_pages(npages, options):
"""Generated the list of page numbers for booklet printing.
"""
signature=options.signature
if signature == 0:
maxpage = npages + (4 - npages % 4) % 4
signature = maxpage
else:
maxpage = npages + (signature - npages % signature) % signature
actualpg = [ 0 ] * maxpage
for i in range(0, maxpage):
actual = i - i % signature
if i % 4 in (0, 3):
actual += signature - 1 - (i % signature) / 2
else:
actual += (i % signature) / 2
if actual < npages:
actualpg[i] = actual + 1
if options.rtol:
swap_pairs(actualpg, maxpage)
return actualpg
def generate_book(inputfile, outputfile, options):
"""Convert input to output, using options.
"""
npages = get_number_of_pages(inputfile)
if npages < 1:
print "invalid number of pages (%d)" % npages
check_dependencies()
return
if options.debug:
print "Processing %d pages" % npages
actualpg = shuffled_pages(npages, options)
def printable(n):
if n:
if not options.quiet:
print "[%d]" % n,
return str(n)
else:
if not options.quiet:
print "[*]",
return "{}"
compile_dir=tempfile.mkdtemp()
if options.debug:
print "Generating files in directory ", compile_dir
(outbase, ext) = os.path.splitext(os.path.basename(outputfile))
outtex=".".join( (outbase, 'tex') )
outpdf=".".join( (outbase, 'pdf') )
fullouttex=os.path.join( compile_dir, outtex )
fulloutpdf=os.path.join( compile_dir, outpdf )
# LaTeX generation
fout = open(fullouttex, "w")
fout.write("""\\documentclass[12pt,a4paper,openany]{book}
\\usepackage{pdfpages}
\\begin{document}
\\includepdf[nup=1x2,landscape,pages={%s}]{%s}
\\end{document}
""" % (",".join( [ printable(n) for n in actualpg ] ),
inputfile ))
fout.close()
if not options.quiet:
print "\nGenerating %s now, please wait..." % outputfile
cmdline = "pdflatex -output-directory '%s' '%s'" % ( compile_dir, fullouttex )
if not options.debug:
cmdline += "> /dev/null 2>&1 < /dev/null"
else:
print "Executing ", cmdline
ret=os.system(cmdline)
if ret:
print "Failed to generate %s" % outputfile
check_dependencies()
return
if os.path.exists(fulloutpdf):
shutil.move( fulloutpdf, outputfile )
else:
print "Cannot find %s in %s" % (outpdf, compile_dir)
return 1
if options.debug < 2:
# Cleanup
shutil.rmtree(compile_dir)
return 0
def main():
"""Option parsing.
"""
parser=OptionParser(usage="""Rearrange pages in a PDF file into signatures.
%prog [options] input_file.pdf [output_file.pdf]""")
parser.add_option("-s", "--signature", dest="signature", action="store",
type="int", default=0, metavar="SIGNATURE",
help="Signature of the booklet. It must be positive and divisible by 4.")
parser.add_option("-r", "--right-to-left", dest="rtol", action="store_true",
help="Do right-to-left typesetting", default=False)
parser.add_option("-q", "--quiet", dest="quiet", action="store_true",
help="Be quiet", default=False)
parser.add_option("-d", "--debug", dest="debug", action="store",
help="Debug level (1: display messages, 2: keep intermediary files",
default=0)
(options, args) = parser.parse_args()
try:
inputfile=args[0]
except IndexError:
print "input file must be specified"
parser.print_help()
return
if not os.path.exists(inputfile):
print "Cannot read input file", inputfile
return
(inputbase, ext) = os.path.splitext(inputfile)
if ext != '.pdf':
print "Input file %s should end with .pdf" % inputfile
return
try:
outputfile=args[1]
except IndexError:
outbase = os.path.basename(inputbase)
outputfile=outbase+"-book"+ext
if options.signature:
if options.signature < 0 or options.signature % 4:
parser.print_help()
return
if options.debug:
print "Input file :", inputfile
print "Output file :", outputfile
print "Signature :", options.signature
return generate_book(inputfile, outputfile, options)
if __name__ == '__main__':
main()
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки
2014-11-03 18:29 [Comm] Как разрезать книгу для прошивки Eugine Kosenko
2014-11-03 20:14 ` Denis G. Samsonenko
2014-11-04 4:51 ` Gleb Kulikov
@ 2014-11-04 9:54 ` Victor
2014-11-04 13:23 ` Sergey
2014-11-06 14:32 ` Eugine Kosenko
2 siblings, 2 replies; 9+ messages in thread
From: Victor @ 2014-11-04 9:54 UTC (permalink / raw)
To: ALT Linux Community general discussions
> Пусть есть текст (книга), разбитый определенным образом на страницы.
> Нужно распечатать этот текст на листах формата A4 в альбомном
> расположении по две страницы на лист. В дальнейшем эти листы
> предполагается согнуть пополам и сшить по линии сгиба, чтобы
> получилась брошюра.
>
> При этом возникает следующая проблема. На первом листе нужно
> напечатать справа первую, а слева последнюю страницу. С другой стороны
> того же листа нужно напечатать слева вторую, а справа ---
> предпоследнюю страницу. На следующем листе нужно печатать справа
> третью страницу, а слева --- третью с конца. И так далее.
>
> Вопрос: как обеспечить такую верстку текста?
>
> Понятно, что TeX мне в руки и вперед. Но есть ли какие-нибудь
> стандартные решения без сложного освоения? Может быть, есть
> специальный софт для этого?
> _______________________________________________
> community mailing list
> community@lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/community
Если текст - это просто текст, то Libreoffice поддерживает печать брошюрой (при
печати на вкладке "Макет страницы" ткнуть "Brochure"). Правда печатает при
этом только одним блоком. Соответственно, разбиение на блоки придется делать
вручную.
Если текст - это PDF, то можно воспользоваться тем же Libreoffice (он умеет их
открывать) и тоже брошюрой его.
----
Виктор.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки
2014-11-04 9:54 ` Victor
@ 2014-11-04 13:23 ` Sergey
2014-11-06 14:38 ` Eugine Kosenko
2014-11-06 14:32 ` Eugine Kosenko
1 sibling, 1 reply; 9+ messages in thread
From: Sergey @ 2014-11-04 13:23 UTC (permalink / raw)
To: community
On Tuesday 04 November 2014, Victor wrote:
> Если текст - это PDF, то можно воспользоваться тем же Libreoffice (он умеет их
> открывать) и тоже брошюрой его.
Ещё Acrobat Reader это умеет. Нового больше больше нет для Linux, и, даже,
на сайте выбора нет для Linux, но можно пока нарыть прямые ссылки, и, даже,
у Adobe:
Вчера себе качал вот:
http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i486linux_enu.rpm
--
С уважением, Сергей
a_s_y@sama.ru
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки
2014-11-04 9:54 ` Victor
2014-11-04 13:23 ` Sergey
@ 2014-11-06 14:32 ` Eugine Kosenko
2014-11-13 4:24 ` Gleb Kulikov
1 sibling, 1 reply; 9+ messages in thread
From: Eugine Kosenko @ 2014-11-06 14:32 UTC (permalink / raw)
To: hisbreht, ALT Linux Community general discussions
2014-11-04 11:54 GMT+02:00, Victor <hisbreht@yandex.ru>:
> Если текст - это просто текст, то Libreoffice поддерживает печать брошюрой
> (при
> печати на вкладке "Макет страницы" ткнуть "Brochure"). Правда печатает при
> этом только одним блоком. Соответственно, разбиение на блоки придется делать
> вручную.
Я правильно понял, что это возможно только при финальной печати? Ведь
в диалоге "Экспорт в PDF" такой закладки нет.
Что такое "разбиение на блоки" и как его делать вручную?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки
2014-11-04 13:23 ` Sergey
@ 2014-11-06 14:38 ` Eugine Kosenko
2014-11-07 7:34 ` Sergey
0 siblings, 1 reply; 9+ messages in thread
From: Eugine Kosenko @ 2014-11-06 14:38 UTC (permalink / raw)
To: ALT Linux Community general discussions
2014-11-04 15:23 GMT+02:00, Sergey <a_s_y@sama.ru>:
> Вчера себе качал вот:
> http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i486linux_enu.rpm
Эта версия в Сизифе может быть установлена? Честно говоря, с AR не
работал позже 6 версии, но не помню там такой возможности. Под MS
Windows в этой версии тоже есть такая возможность?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки
2014-11-06 14:38 ` Eugine Kosenko
@ 2014-11-07 7:34 ` Sergey
0 siblings, 0 replies; 9+ messages in thread
From: Sergey @ 2014-11-07 7:34 UTC (permalink / raw)
To: ALT Linux Community general discussions
On Thursday 06 November 2014, Eugine Kosenko wrote:
> > Вчера себе качал вот:
> > http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i486linux_enu.rpm
>
> Эта версия в Сизифе может быть установлена ?
У меня Сизифа нет сейчас, в p7 ставится. apt дотягивает
libpangox-compat и libgdk-pixbuf-xlib
> Честно говоря, с AR не работал позже 6 версии, но не
> помню там такой возможности. Под MS Windows в этой
> версии тоже есть такая возможность ?
У меня нет Windows, но печать брошурой в AR/Linux есть
очень давно, лет около десяти.
--
С уважением, Сергей.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки
2014-11-06 14:32 ` Eugine Kosenko
@ 2014-11-13 4:24 ` Gleb Kulikov
0 siblings, 0 replies; 9+ messages in thread
From: Gleb Kulikov @ 2014-11-13 4:24 UTC (permalink / raw)
To: ALT Linux Community general discussions
В сообщении от [6 ноября 2014 Eugine Kosenko] написал:
> Я правильно понял, что это возможно только при финальной печати? Ведь
> в диалоге "Экспорт в PDF" такой закладки нет.
Скрипт, который я бросал 4.11, делает именно pdf файл с "правильно" (для
печати) рсположенными страницами.
--
Салют, /GLeb
UIN: 15341920
jabber://gleb@asd.iao.ru
sip://2387245@sipnet.ru (telephony)
skype://gleb_kulikov.tomsk (telephony)
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2014-11-13 4:24 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-11-03 18:29 [Comm] Как разрезать книгу для прошивки Eugine Kosenko
2014-11-03 20:14 ` Denis G. Samsonenko
2014-11-04 4:51 ` Gleb Kulikov
2014-11-04 9:54 ` Victor
2014-11-04 13:23 ` Sergey
2014-11-06 14:38 ` Eugine Kosenko
2014-11-07 7:34 ` Sergey
2014-11-06 14:32 ` Eugine Kosenko
2014-11-13 4:24 ` Gleb Kulikov
ALT Linux Community general discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
public-inbox-index community
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.community
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git